Files
dolt/bats/schema-changes.bats

137 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bats
load $BATS_TEST_DIRNAME/helper/common.bash
setup() {
setup_common
dolt sql <<SQL
CREATE TABLE test (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
}
teardown() {
teardown_common
}
@test "changing column types should not produce a data diff error" {
dolt sql -q 'insert into test values (0,0,0,0,0,0)'
dolt add test
dolt commit -m 'made table'
dolt sql -q 'alter table test drop column c1'
dolt sql -q 'alter table test add column c1 longtext'
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "BIGINT" ]] || false
[[ "$output" =~ "LONGTEXT" ]] || false
[[ ! "$ouput" =~ "Failed to merge schemas" ]] || false
}
@test "dolt schema rename column" {
dolt sql -q 'insert into test values (1,1,1,1,1,1)'
run dolt sql -q "alter table test rename column c1 to c0"
[ "$status" -eq 0 ]
run dolt schema show test
[ "$status" -eq 0 ]
[[ "$output" =~ "test @ working" ]] || false
[[ "$output" =~ "CREATE TABLE \`test\`" ]] || false
[[ "$output" =~ "\`pk\` bigint NOT NULL" ]] || false
[[ "$output" =~ "\`c2\` bigint" ]] || false
[[ "$output" =~ "\`c3\` bigint" ]] || false
[[ "$output" =~ "\`c4\` bigint" ]] || false
[[ "$output" =~ "\`c5\` bigint" ]] || false
[[ "$output" =~ "PRIMARY KEY (\`pk\`)" ]] || false
[[ "$output" =~ "\`c0\` bigint" ]] || false
[[ ! "$output" =~ "\`c1\` bigint" ]] || false
dolt sql -q "select * from test"
}
@test "dolt schema delete column" {
dolt sql -q 'insert into test values (1,1,1,1,1,1)'
run dolt sql -q "alter table test drop column c1"
[ "$status" -eq 0 ]
run dolt schema show test
[ "$status" -eq 0 ]
[[ "$output" =~ "test @ working" ]] || false
[[ "$output" =~ "CREATE TABLE \`test\`" ]] || false
[[ "$output" =~ "\`pk\` bigint NOT NULL" ]] || false
[[ "$output" =~ "\`c2\` bigint" ]] || false
[[ "$output" =~ "\`c3\` bigint" ]] || false
[[ "$output" =~ "\`c4\` bigint" ]] || false
[[ "$output" =~ "\`c5\` bigint" ]] || false
[[ "$output" =~ "PRIMARY KEY (\`pk\`)" ]] || false
[[ ! "$output" =~ "\`c1\` bigint" ]] || false
dolt sql -q "select * from test"
}
@test "dolt diff on schema changes" {
dolt add test
dolt commit -m "committed table so we can see diffs"
dolt sql -q "alter table test add c0 bigint"
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ \+[[:space:]]+\`c0\` ]] || false
[[ "$output" =~ "| c0 |" ]] || false
run dolt diff --schema
[ "$status" -eq 0 ]
[[ "$output" =~ \+[[:space:]]+\`c0\` ]] || false
[[ ! "$output" =~ "| c0 |" ]] || false
run dolt diff --data
[ "$status" -eq 0 ]
[[ ! "$output" =~ \+[[:space:]]+\`c0\` ]] || false
[[ "$output" =~ "| c0 |" ]] || false
[[ "$output" =~ ">" ]] || false
[[ "$output" =~ "<" ]] || false
# Check for a blank column in the diff output
[[ "$output" =~ \|[[:space:]]+\| ]] || false
dolt sql -q "insert into test (pk,c0,c1,c2,c3,c4,c5) values (0,0,0,0,0,0,0)"
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ \|[[:space:]]+c0[[:space:]]+\| ]] || false
[[ "$output" =~ \+[[:space:]]+[[:space:]]+\|[[:space:]]+0 ]] || false
dolt sql -q "alter table test drop column c0"
dolt diff
}
@test "adding and dropping column should produce no diff" {
dolt add test
dolt commit -m "committed table so we can see diffs"
dolt sql -q "alter table test add c0 bigint"
dolt sql -q "alter table test drop column c0"
run dolt diff
[ "$status" -eq 0 ]
[ "$output" = "" ]
}
@test "schema diff should show primary keys in output" {
dolt add test
dolt commit -m "committed table so we can see diffs"
dolt sql -q 'alter table test rename column c2 to column2'
run dolt diff --schema
[ "$status" -eq 0 ]
[[ "$output" =~ "PRIMARY KEY" ]] || false
}
@test "changing column does not allow nulls in primary key" {
dolt sql <<SQL
CREATE TABLE test2(
pk1 BIGINT,
pk2 BIGINT,
v1 BIGINT,
PRIMARY KEY(pk1, pk2)
);
SQL
run dolt sql -q "INSERT INTO test2 (pk1, pk2) VALUES (1, null)"
[ "$status" -eq 1 ]
dolt sql -q "ALTER TABLE test2 CHANGE pk2 pk2new BIGINT"
run dolt sql -q "INSERT INTO test2 (pk1, pk2new) VALUES (1, null)"
[ "$status" -eq 1 ]
}