Files
dolt/integration-tests/bats/query-catalog.bats

198 lines
5.3 KiB
Bash

#!/usr/bin/env bats
load $BATS_TEST_DIRNAME/helper/common.bash
setup() {
setup_common
dolt sql <<SQL
CREATE TABLE one_pk (
pk BIGINT NOT NULL,
c1 BIGINT,
c2 BIGINT,
c3 BIGINT,
c4 BIGINT,
c5 BIGINT,
PRIMARY KEY (pk)
);
SQL
dolt sql <<SQL
CREATE TABLE two_pk (
pk1 BIGINT NOT NULL,
pk2 BIGINT NOT NULL,
c1 BIGINT,
c2 BIGINT,
c3 BIGINT,
c4 BIGINT,
c5 BIGINT,
PRIMARY KEY (pk1,pk2)
);
SQL
dolt sql -q "insert into one_pk (pk,c1,c2,c3,c4,c5) values (0,0,0,0,0,0),(1,10,10,10,10,10),(2,20,20,20,20,20),(3,30,30,30,30,30)"
dolt sql -q "insert into two_pk (pk1,pk2,c1,c2,c3,c4,c5) values (0,0,0,0,0,0,0),(0,1,10,10,10,10,10),(1,0,20,20,20,20,20),(1,1,30,30,30,30,30)"
}
teardown() {
assert_feature_version
teardown_common
}
@test "query-catalog: save query" {
run dolt sql -q "desc dolt_query_catalog"
[ "$status" -eq 1 ]
run dolt sql -q "select pk,pk1,pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1" -s "my name" -m "my message"
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 8 ]
run dolt sql -q "desc dolt_query_catalog"
[ "$status" -eq 0 ]
run dolt sql -q "select * from dolt_query_catalog" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "id,display_order,name,query,description" ]] || false
[[ "$output" =~ "my message" ]] || false
[[ "$output" =~ "my name" ]] || false
[[ "$output" =~ "select pk,pk1,pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1" ]] || false
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "dolt_query_catalog" ]] || false
run dolt add dolt_query_catalog
[ "$status" -eq 0 ]
run dolt commit -m "Added query catalog"
[ "$status" -eq 0 ]
run dolt status
[ "$status" -eq 0 ]
! [[ "$output" =~ "dolt_query_catalog" ]] || false
run dolt sql -q "select * from dolt_query_catalog" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
}
@test "query-catalog: empty directory" {
mkdir empty && cd empty
run dolt sql -q "show databases" --save name
[ "$status" -ne 0 ]
[[ ! "$output" =~ panic ]] || false
[[ "$output" =~ "--save must be used in a dolt database directory" ]] || false
run dolt sql --list-saved
[ "$status" -ne 0 ]
[[ ! "$output" =~ panic ]] || false
[[ "$output" =~ "--list-saved must be used in a dolt database directory" ]] || false
run dolt sql --execute name
[ "$status" -ne 0 ]
[[ ! "$output" =~ panic ]] || false
[[ "$output" =~ "--execute must be used in a dolt database directory" ]] || false
}
@test "query-catalog: conflict" {
dolt sql -q "select pk,pk1,pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1" -s "name1" -m "my message"
dolt add .
dolt commit -m 'Added a test query'
dolt checkout -b edit_a
dolt sql -q "update dolt_query_catalog set name='name_a'"
dolt add .
dolt commit -m 'Changed name to edit_a'
dolt checkout main
dolt checkout -b edit_b
dolt sql -q "update dolt_query_catalog set name='name_b'"
dolt add .
dolt commit -m 'Changed name to edit_b'
dolt checkout main
dolt merge edit_a -m "merge edit_a"
run dolt merge edit_b -m "merge edit_b"
[ "$status" -eq 0 ]
[[ "$output" =~ "Merge conflict in dolt_query_catalog" ]] || false
run dolt conflicts cat .
[ "$status" -eq 0 ]
[[ "$output" =~ "name_a" ]] || false
[[ "$output" =~ "name_b" ]] || false
}
@test "query-catalog: executed saved" {
Q1="select pk, pk1, pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1 order by 1"
Q2="select pk from one_pk order by pk"
dolt sql -q "$Q1" -s name1
dolt sql -q "$Q2" -s name2
# save Q1 and verify output
EXPECTED=$(cat <<'EOF'
pk,pk1,pk2
0,0,0
1,0,1
2,1,0
3,1,1
EOF
)
run dolt sql -r csv -x name1
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED" ]] || false
# save Q2 and verify output
EXPECTED=$(cat <<'EOF'
pk
0
1
2
3
EOF
)
run dolt sql -r csv -x name2
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED" ]] || false
# execute list-saved and verify output. I have no idea why the
# query on the second line isn't quoted, assuming it's a bash
# interpretation thing. Has quotes when run by hand.
EXPECTED=$(cat <<'EOF'
id,display_order,name,query,description
name1,1,name1,"select pk, pk1, pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1 order by 1",""
name2,2,name2,select pk from one_pk order by pk,""
EOF
)
run dolt sql --list-saved -r csv
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED" ]] || false
# update an existing query, and verify query catalog is updated
Q1_UPDATED="select pk, pk1, pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1 and pk < 3 order by 1 desc"
dolt sql -q "$Q1_UPDATED" -s name1
# execute list-saved and verify output
EXPECTED=$(cat <<'EOF'
id,display_order,name,query,description
name1,1,name1,"select pk, pk1, pk2 from one_pk,two_pk where one_pk.c1=two_pk.c1 and pk < 3 order by 1 desc",""
name2,2,name2,select pk from one_pk order by pk,""
EOF
)
run dolt sql --list-saved -r csv
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED" ]] || false
EXPECTED=$(cat <<'EOF'
pk,pk1,pk2
2,1,0
1,0,1
0,0,0
EOF
)
# Execute updated saved query and verify once output
run dolt sql -r csv -x name1
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED" ]] || false
}