#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash setup() { setup_common dolt sql < | 4 | 100 | NULL | NULL | | + | 7 | 8 | NULL | 9 | +---+----+-----+------+------+ EOF ) [ "$status" -eq 0 ] [[ "$output" =~ "$EXPECTED" ]] || false run dolt diff --data --schema [ "$status" -eq 0 ] [[ "$output" =~ "$EXPECTED" ]] || false run dolt diff --schema EXPECTED=$(cat <<'EOF' CREATE TABLE `test` ( `pk` int NOT NULL, `c1` int, - `c2` int, + `c3` varchar(10), PRIMARY KEY (`pk`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin; EOF ) [[ "$output" =~ "$EXPECTED" ]] || false # Count the line numbers to make sure there are no data changes output [ "${#lines[@]}" -eq 10 ] run dolt diff --data EXPECTED=$(cat <<'EOF' +---+----+-----+------+------+ | | pk | c1 | c2 | c3 | +---+----+-----+------+------+ | - | 1 | 2 | 3 | NULL | | < | 4 | 5 | 6 | NULL | | > | 4 | 100 | NULL | NULL | | + | 7 | 8 | NULL | 9 | +---+----+-----+------+------+ EOF ) [[ "$output" =~ "$EXPECTED" ]] || false # Count the line numbers to make sure there are no schema changes output [ "${#lines[@]}" -eq 11 ] } @test "diff: data diff only" { dolt add . dolt commit -am "First commit" dolt sql -q "insert into test (pk) values (10);" dolt diff run dolt diff [ "$status" -eq 0 ] [[ ! "$output" =~ "CREATE TABLE" ]] || false [[ "$output" =~ "| | pk | c1 | c2 | c3 | c4 | c5 |" ]] || false [[ "$output" =~ "| + | 10 | NULL | NULL | NULL | NULL | NULL |" ]] || false } @test "diff: schema changes only" { dolt add . dolt commit -am "First commit" dolt sql < employees.csv "id","first name","last name","title","start date","end date" 0,tim,sehn,ceo,"","" 1,aaron,son,founder,"","" 2,brian,hendricks,founder,"","" DELIM dolt table import -c -pk=id employees employees.csv dolt add employees dolt commit -m "Added employees table with data" dolt sql -q "alter table employees add city longtext" dolt sql -q "insert into employees values (3, 'taylor', 'bantle', 'software engineer', '', '', 'Santa Monica')" dolt diff --summary run dolt diff --summary [ "$status" -eq 0 ] [[ "$output" =~ "3 Rows Unmodified (100.00%)" ]] || false [[ "$output" =~ "1 Row Added (33.33%)" ]] || false [[ "$output" =~ "0 Rows Deleted (0.00%)" ]] || false [[ "$output" =~ "0 Rows Modified (0.00%)" ]] || false [[ "$output" =~ "10 Cells Added (55.56%)" ]] || false [[ "$output" =~ "0 Cells Deleted (0.00%)" ]] || false [[ "$output" =~ "0 Cells Modified (0.00%)" ]] || false [[ "$output" =~ "(3 Row Entries vs 4 Row Entries)" ]] || false dolt sql -q "replace into employees values (0, 'tim', 'sehn', 'ceo', '2 years ago', '', 'Santa Monica')" dolt diff --summary run dolt diff --summary [ "$status" -eq 0 ] [[ "$output" =~ "2 Rows Unmodified (66.67%)" ]] || false [[ "$output" =~ "1 Row Added (33.33%)" ]] || false [[ "$output" =~ "0 Rows Deleted (0.00%)" ]] || false [[ "$output" =~ "1 Row Modified (33.33%)" ]] || false [[ "$output" =~ "10 Cells Added (55.56%)" ]] || false [[ "$output" =~ "0 Cells Deleted (0.00%)" ]] || false [[ "$output" =~ "2 Cells Modified (11.11%)" ]] || false [[ "$output" =~ "(3 Row Entries vs 4 Row Entries)" ]] || false } @test "diff: summary gets summaries for all tables with changes" { dolt sql -q "insert into test values (0, 0, 0, 0, 0, 0)" dolt sql -q "insert into test values (1, 1, 1, 1, 1, 1)" dolt sql < 0" --limit 1 EXPECTED_TABLE2=$(cat <<'EOF' +---+----+ | | pk | +---+----+ | + | 1 | +---+----+ EOF ) [[ "$output" =~ "$EXPECTED_TABLE2" ]] || false run dolt diff --limit 0 [[ "$output" =~ "diff --dolt a/test b/test" ]] || false [[ "$output" =~ "--- a/test @" ]] || false [[ "$output" =~ "+++ b/test @" ]] || false [[ "$output" =~ "diff --dolt a/test2 b/test2" ]] || false [[ "$output" =~ "--- a/test2 @" ]] || false [[ "$output" =~ "+++ b/test2 @" ]] || false run dolt diff --limit [ "$status" -ne 0 ] } @test "diff: allowed across primary key renames" { dolt sql < | NULL | 100 | 1 | +---+------+------+------+ EOF ) [[ "$output" =~ "$EXPECTED_TABLE" ]] EXPECTED_TABLE=$(cat <<'EOF' +---+------+------+------+------+------+ | | pk1a | pk1b | col1 | pk2a | pk2b | +---+------+------+------+------+------+ | < | 1 | 1 | 1 | NULL | NULL | | > | NULL | NULL | 100 | 1 | 1 | +---+------+------+------+------+------+ EOF ) [[ "$output" =~ "$EXPECTED_TABLE" ]] } # This test was added to prevent short tuples from causing an empty diff. @test "diff: add a column, then set and unset its value. Should not show a diff" { dolt sql -q "CREATE table t (pk int primary key);" dolt sql -q "Insert into t values (1), (2), (3);" dolt sql -q "alter table t add column col1 int;" dolt add . dolt commit -am "setup" # Turn a short tuple into a nominal one dolt sql -q "UPDATE t set col1 = 1 where pk = 1;" dolt sql -q "UPDATE t set col1 = null where pk = 1;" run dolt diff [ $status -eq 0 ] [[ ! "$output" =~ "| 1" ]] || false run dolt diff --summary [ $status -eq 0 ] [[ ! "$output" =~ "1 Row Modified" ]] || false }