#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash setup() { setup_common dolt sql < 50 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "5,55" ]] || false [[ "$output" =~ "6,66" ]] || false } @test "auto_increment: create auto_increment table with out-of-line PK def" { run dolt sql < 1 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "2,2" ]] || false run dolt sql -q "INSERT INTO test VALUES (NULL,3), (10,10), (NULL,11);" [ "$status" -eq 0 ] run dolt sql -q "SELECT * FROM test WHERE c0 > 2 ORDER BY pk;" -r csv echo $output [ "$status" -eq 0 ] [[ "$output" =~ "3,3" ]] || false [[ "$output" =~ "10,10" ]] || false [[ "$output" =~ "11,11" ]] || false } @test "auto_increment: insert into auto_increment table with 0" { dolt sql -q "INSERT INTO test VALUES (1,1);" run dolt sql -q "INSERT INTO test (pk,c0) VALUES (0,2);" [ "$status" -eq 0 ] run dolt sql -q "SELECT * FROM test WHERE c0 > 1 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "2,2" ]] || false run dolt sql -q "INSERT INTO test VALUES (0,3), (10,10), (0,11);" [ "$status" -eq 0 ] run dolt sql -q "SELECT * FROM test WHERE c0 > 2 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "3,3" ]] || false [[ "$output" =~ "10,10" ]] || false [[ "$output" =~ "11,11" ]] || false } @test "auto_increment: insert into auto_increment table via batch mode" { run dolt sql < 1 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "2,2" ]] || false done # unsigned integer types for TYPE in TINYINT SMALLINT MEDIUMINT INT BIGINT do dolt sql < 1 ORDER BY pk;" -r csv [ "$status" -eq 0 ] [[ "$output" =~ "2,2" ]] || false done } @test "auto_increment: FLOAT and DOUBLE AUTO_INCREMENT should be rejected" { # floating point types should be rejected in MySQL 8.4.5+ for TYPE in FLOAT DOUBLE do run dolt sql < 2 order by 1" -r csv [ $status -eq 0 ] [[ "$output" =~ "4" ]] || false } @test "auto_increment: auto inc shows up in SHOW CREATE (AS OF)" { dolt checkout -b other dolt sql -q "create table t(pk int primary key auto_increment);" dolt sql -q "insert into t values (1);" dolt commit -Am "create table" dolt sql -q "insert into t values (2);" dolt commit -Am "insert into table" run dolt sql -q 'show create table t' [ "$status" -eq 0 ] [[ "$output" =~ AUTO_INCREMENT ]] || false run dolt sql -q 'show create table t as of other' [ "$status" -eq 0 ] [[ "$output" =~ AUTO_INCREMENT ]] || false run dolt sql -q 'show create table t as of HEAD' [ "$status" -eq 0 ] [[ "$output" =~ AUTO_INCREMENT ]] || false dolt sql -q 'show create table t as of `HEAD^`' run dolt sql -q 'show create table t as of `HEAD^`' [ "$status" -eq 0 ] [[ "$output" =~ AUTO_INCREMENT ]] || false } @test "auto_increment: setting auto_increment to 1 vs 0 produces identical hashes and no diffs" { dolt branch auto_increment_0 dolt branch auto_increment_1 dolt checkout auto_increment_0 dolt sql -q "ALTER TABLE test AUTO_INCREMENT=0;" run dolt commit -Am "explicitly set AUTO_INCREMENT to 0" [ "$status" -eq 1 ] [[ "$output" =~ "no changes added to commit" ]] || false # Make a new commit by touching an unrelated table dolt sql -q "CREATE TABLE other (pk int primary key)" run dolt commit -Am "create other table" dolt checkout auto_increment_1 dolt sql -q "ALTER TABLE test AUTO_INCREMENT=1;" run dolt commit -Am "explicitly set AUTO_INCREMENT to 1" [ "$status" -eq 1 ] [[ "$output" =~ "no changes added to commit" ]] || false # Make a new commit by touching an unrelated table dolt sql -q "CREATE TABLE other (pk char(1) primary key)" run dolt commit -Am "create other table" # Verify that tables produce no diff run dolt diff main auto_increment_0 test [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 0 ] run dolt diff main auto_increment_1 test [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 0 ] # Verify that tables have the same hash dolt checkout main main_hash=$(dolt sql -r csv -q "SELECT DOLT_HASHOF_TABLE('test')") dolt checkout auto_increment_0 ai0_hash=$(dolt sql -r csv -q "SELECT DOLT_HASHOF_TABLE('test')") dolt checkout auto_increment_1 ai1_hash=$(dolt sql -r csv -q "SELECT DOLT_HASHOF_TABLE('test')") [[ "$main_hash" = "$ai0_hash" ]] || false [[ "$main_hash" = "$ai1_hash" ]] || false } @test "auto_increment: overflow protection for TINYINT" { # Test for Issue #9530: auto increment overflow behavior dolt sql <