Files
dolt/integration-tests/bats/sql-shell-binary-as-hex.expect
2025-07-30 12:12:16 -07:00

103 lines
3.1 KiB
Plaintext

#!/usr/bin/expect
# dolthub/dolt#9554
# https://github.com/dolthub/dolt/issues/9554
# Test script for binary-a-hex flag behavior in dolt sql.
#
# Usage:
# expect binary-hex-test.expect [flags...]
#
# Tracked flags:
# --binary-as-hex: Use binary as hex encoding for VARBINARY and BINARY types.
# --skip-binary-as-hex: Skip binary as hex encoding for VARBINARY and BINARY types.
source "$env(BATS_CWD)/helper/common_expect_functions.tcl"
set timeout 10
set env(NO_COLOR) 1
set has_binary_hex 0
set has_skip_hex 0
foreach arg $argv {
if {$arg eq "--binary-as-hex"} {set has_binary_hex 1}
if {$arg eq "--skip-binary-as-hex"} {set has_skip_hex 1}
}
# In the interactive shell, the default behavior is to use binary as hex output.
if {!$has_skip_hex} {
set has_binary_hex 1
}
proc run_query {query expect_proc} {
global has_skip_hex has_binary_hex argv
expect_with_defaults {>} "send {$query\r}"
eval $expect_proc
}
# Handles the following cases:
# 1. check dolt's ability to detect conflicting flags.
# 2. spawns interactive shell
spawn dolt sql {*}$argv
if {$has_binary_hex && $has_skip_hex} {
expect {
"cannot use both --binary-as-hex and --skip-binary-as-hex" {
expect eof
exit 3 # differentiate exit err from common_expect_functions.tcl
}
eof {
puts "Process ended without error message."
exit 1
}
}
}
run_query "DROP TABLE IF EXISTS test_vbin;" {}
run_query "CREATE TABLE test_vbin (id INT PRIMARY KEY, v VARBINARY(10));" {}
run_query "INSERT INTO test_vbin VALUES (1, 'abc');" {}
run_query "SELECT *, LENGTH(v) FROM test_vbin;" {
if {$has_skip_hex} {
expect_without_pattern {0x[0-9A-F]+} {}
} else {
expect_with_defaults_2 {0x616263} {\| 3 } {}
}
}
run_query "INSERT INTO test_vbin VALUES (2, UNHEX('0A000000001000112233'));" {}
run_query "INSERT INTO test_vbin VALUES (3, UNHEX(''));" {}
run_query "SELECT *, LENGTH(v) FROM test_vbin;" {
if {$has_skip_hex} {
expect_without_pattern {0x[0-9A-F]+} {}
} else {
expect_with_defaults_2 {0x616263} {\| 3 } {}
expect_with_defaults_2 {0x0A000000001000112233} {\| 10 } {}
expect_with_defaults_2 {0x} {\| 0 } {}
}
}
run_query "DROP TABLE IF EXISTS test_bin;" {}
run_query "CREATE TABLE test_bin (id INT PRIMARY KEY, b BINARY(10));" {}
run_query "INSERT INTO test_bin VALUES (1, 'abc');" {}
run_query "SELECT *, LENGTH(b) FROM test_bin;" {
if {$has_skip_hex} {
expect_without_pattern {0x[0-9A-F]+} {}
} else {
expect_with_defaults_2 {0x61626300000000000000} {\| 10 } {}
}
}
run_query "INSERT INTO test_bin VALUES (2, UNHEX('0A000000001000112233'));" {}
run_query "INSERT INTO test_bin VALUES (3, UNHEX(''));" {}
run_query "SELECT *, LENGTH(b) FROM test_bin;" {
if {$has_skip_hex} {
expect_without_pattern {0x[0-9A-F]+} {}
} else {
expect_with_defaults_2 {0x61626300000000000000} {\| 10 } {}
expect_with_defaults_2 {0x0A000000001000112233} {\| 10 } {}
expect_with_defaults_2 {0x00000000000000000000} {\| 10 } {}
}
}
run_query "exit;" { expect eof }
exit 0