#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash setup() { setup_common } teardown() { assert_feature_version teardown_common } @test "sql-diff: output reconciles INSERT query" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query cat query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles UPDATE query" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query rm query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles DELETE query" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query rm query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles change to PRIMARY KEY field in row " { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query rm query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles column rename" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query cat query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles DROP column query" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch cat query dolt sql < query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: output reconciles ADD column query" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch dolt sql < query rm query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: reconciles CREATE TABLE" { dolt checkout -b firstbranch dolt checkout -b newbranch dolt sql < query echo "----------------------" cat query echo "----------------------" dolt checkout firstbranch dolt sql < query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: includes row INSERTSs to new tables after CREATE TABLE" { dolt checkout -b firstbranch dolt checkout -b newbranch dolt sql < query dolt checkout firstbranch cat query dolt sql < query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content dolt diff -r sql firstbranch newbranch run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: reconciles DROP TABLE" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch cat query dolt sql < query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: reconciles RENAME TABLE" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch cat query dolt sql < query dolt add . dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] grep 'RENAME' query } @test "sql-diff: reconciles RENAME TABLE with schema changes" { dolt checkout -b firstbranch dolt sql < query dolt checkout firstbranch cat query dolt sql < query dolt add . dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content skip "this test is generating extra sql" run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] grep 'RENAME' query } @test "sql-diff: reconciles CREATE/ALTER/DROP VIEW" { dolt sql -q 'create table test (pk int not null primary key)' dolt sql -q 'create view double_view as select pk*2 from test' run dolt diff -r sql [ "$status" -eq 0 ] skip "create view statements not implemented" [[ "$output" =~ "CREATE VIEW `double_view`" ]] || false } @test "sql-diff: diff sql recreates tables with all types" { dolt checkout -b firstbranch dolt checkout -b newbranch dolt sql < query dolt checkout firstbranch dolt sql < query rm query dolt add test dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content dolt diff -r sql firstbranch newbranch run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: supports all types" { dolt checkout -b firstbranch dolt sql < patch.sql newbranch dolt checkout firstbranch dolt sql < patch.sql rm patch.sql dolt add . dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] done } @test "sql-diff: supports multiple primary keys" { dolt checkout -b firstbranch dolt sql < patch.sql newbranch dolt checkout firstbranch dolt sql < patch.sql rm patch.sql dolt add . dolt commit -m "Reconciled with newbranch" # confirm that both branches have the same content run dolt diff -r sql firstbranch newbranch [ "$status" -eq 0 ] [ "$output" = "" ] done } @test "sql-diff: escapes values for MySQL string literals" { # https://dev.mysql.com/doc/refman/8.0/en/string-literals.html dolt sql < patch.sql run dolt sql < patch.sql [ "$status" -eq 0 ] run dolt diff -r sql main [ "$status" -eq 0 ] [ "$output" = "" ] } @test "sql-diff: sql diff ignores dolt docs" { echo "This is a README" > README.md run dolt diff -r sql [ "$status" -eq 0 ] skip "Have to decide how to treat dolty_docs in diff -r sql" [[ ! "$output" =~ "dolt_docs" ]] || false; } @test "sql-diff: handles NULL cells" { dolt sql <