From 503665c32ca5de359765f02a090c3746f097e31a Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 15 Mar 2021 12:53:14 -0700 Subject: [PATCH 1/3] /integration-tests: move mysql-client-tests to integration-tests --- .gitmodules | 6 +- MySQLDockerfile | 12 +- MySQLDockerfile.dockerignore | 8 +- .../mysql-client-tests/.gitignore | 5 + .../mysql-client-tests/README.md | 28 +++ .../mysql-client-tests/c/Makefile | 11 ++ .../c/mysql-connector-c-test.c | 170 ++++++++++++++++++ .../mysql-client-tests/cpp/CMakeLists.txt | 17 ++ .../mysql-client-tests/cpp/Makefile | 14 ++ .../mysql-client-tests/cpp/README.md | 28 +++ .../cpp/mysql-connector-cpp-test.cpp | 77 ++++++++ .../cpp/third_party/mysql-connector-cpp | 1 + .../mysql-client-tests/dotnet/.gitignore | 136 ++++++++++++++ .../dotnet/MySqlClient/Program.cs | 81 +++++++++ .../dotnet/MySqlClient/dotnet.csproj | 12 ++ .../dotnet/MySqlClient/dotnet.sln | 17 ++ .../MySqlConnector/MySqlConnectorTest.csproj | 12 ++ .../MySqlConnector/MySqlConnectorTest.sln | 16 ++ .../dotnet/MySqlConnector/Program.cs | 86 +++++++++ .../go/go-sql-driver-mysql-test.go | 117 ++++++++++++ .../java/MySQLConnectorTest.java | 74 ++++++++ .../mysql-client-tests-entrypoint.sh | 10 ++ .../mysql-client-tests.bats | 97 ++++++++++ .../mysql-client-tests/node/index.js | 109 +++++++++++ .../mysql-client-tests/node/package-lock.json | 81 +++++++++ .../mysql-client-tests/node/package.json | 14 ++ .../mysql-client-tests/perl/dbd-mysql-test.pl | 33 ++++ .../python/mysql.connector-test.py | 51 ++++++ .../mysql-client-tests/python/pymysql-test.py | 43 +++++ .../python/sqlalchemy-test.py | 56 ++++++ .../mysql-client-tests/ruby/Gemfile | 2 + .../mysql-client-tests/ruby/Gemfile.lock | 13 ++ .../ruby/ruby-mysql-test.rb | 23 +++ .../cpp/third_party/mysql-connector-cpp | 1 - 34 files changed, 1447 insertions(+), 14 deletions(-) create mode 100644 integration-tests/mysql-client-tests/.gitignore create mode 100644 integration-tests/mysql-client-tests/README.md create mode 100644 integration-tests/mysql-client-tests/c/Makefile create mode 100644 integration-tests/mysql-client-tests/c/mysql-connector-c-test.c create mode 100644 integration-tests/mysql-client-tests/cpp/CMakeLists.txt create mode 100644 integration-tests/mysql-client-tests/cpp/Makefile create mode 100644 integration-tests/mysql-client-tests/cpp/README.md create mode 100644 integration-tests/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp create mode 160000 integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp create mode 100644 integration-tests/mysql-client-tests/dotnet/.gitignore create mode 100644 integration-tests/mysql-client-tests/dotnet/MySqlClient/Program.cs create mode 100644 integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj create mode 100644 integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.sln create mode 100755 integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj create mode 100755 integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln create mode 100755 integration-tests/mysql-client-tests/dotnet/MySqlConnector/Program.cs create mode 100644 integration-tests/mysql-client-tests/go/go-sql-driver-mysql-test.go create mode 100644 integration-tests/mysql-client-tests/java/MySQLConnectorTest.java create mode 100755 integration-tests/mysql-client-tests/mysql-client-tests-entrypoint.sh create mode 100644 integration-tests/mysql-client-tests/mysql-client-tests.bats create mode 100644 integration-tests/mysql-client-tests/node/index.js create mode 100644 integration-tests/mysql-client-tests/node/package-lock.json create mode 100644 integration-tests/mysql-client-tests/node/package.json create mode 100644 integration-tests/mysql-client-tests/perl/dbd-mysql-test.pl create mode 100644 integration-tests/mysql-client-tests/python/mysql.connector-test.py create mode 100644 integration-tests/mysql-client-tests/python/pymysql-test.py create mode 100644 integration-tests/mysql-client-tests/python/sqlalchemy-test.py create mode 100644 integration-tests/mysql-client-tests/ruby/Gemfile create mode 100644 integration-tests/mysql-client-tests/ruby/Gemfile.lock create mode 100644 integration-tests/mysql-client-tests/ruby/ruby-mysql-test.rb delete mode 160000 mysql-client-tests/cpp/third_party/mysql-connector-cpp diff --git a/.gitmodules b/.gitmodules index 412eb09c78..9548657731 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,6 +10,6 @@ [submodule "proto/third_party/grpc-go"] path = proto/third_party/grpc-go url = https://github.com/grpc/grpc-go.git -[submodule "mysql-client-tests/cpp/third_party/mysql-connector-cpp"] - path = mysql-client-tests/cpp/third_party/mysql-connector-cpp - url = https://github.com/mysql/mysql-connector-cpp.git +[submodule "integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp"] + path = integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp + url = https://github.com/mysql/mysql-connector-cpp diff --git a/MySQLDockerfile b/MySQLDockerfile index 9ffa64ebd3..b068fcef24 100644 --- a/MySQLDockerfile +++ b/MySQLDockerfile @@ -71,8 +71,8 @@ RUN curl -L -o /mysql-client-tests/java/mysql-connector-java-8.0.21.jar \ https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jar # install node deps -COPY ./mysql-client-tests/node/package.json /mysql-client-tests/node/ -COPY ./mysql-client-tests/node/package-lock.json /mysql-client-tests/node/ +COPY ./integration-tests/mysql-client-tests/node/package.json /mysql-client-tests/node/ +COPY ./integration-tests/mysql-client-tests/node/package-lock.json /mysql-client-tests/node/ WORKDIR /mysql-client-tests/node RUN npm install @@ -80,8 +80,8 @@ RUN npm install RUN cpanm DBD::mysql # install ruby dependencies -COPY ./mysql-client-tests/ruby/Gemfile /mysql-client-tests/ruby/ -COPY ./mysql-client-tests/ruby/Gemfile.lock /mysql-client-tests/ruby/ +COPY ./integration-tests/mysql-client-tests/ruby/Gemfile /mysql-client-tests/ruby/ +COPY ./integration-tests/mysql-client-tests/ruby/Gemfile.lock /mysql-client-tests/ruby/ WORKDIR /mysql-client-tests/ruby RUN gem install bundler -v 2.1.4 RUN bundle install @@ -92,8 +92,8 @@ COPY ./go/ . ENV GOFLAGS="-mod=readonly" RUN go build -o /usr/local/bin/dolt ./cmd/dolt -COPY ./mysql-client-tests /mysql-client-tests -COPY ./mysql-client-tests-entrypoint.sh /mysql-client-tests/entrypoint.sh +COPY ./integration-tests/mysql-client-tests /mysql-client-tests +COPY ./integration-tests/mysql-client-tests/mysql-client-tests-entrypoint.sh /mysql-client-tests/entrypoint.sh WORKDIR /mysql-client-tests ENTRYPOINT ["/mysql-client-tests/entrypoint.sh"] diff --git a/MySQLDockerfile.dockerignore b/MySQLDockerfile.dockerignore index a10bfd560b..a9e0d4de5a 100644 --- a/MySQLDockerfile.dockerignore +++ b/MySQLDockerfile.dockerignore @@ -1,4 +1,4 @@ -mysql-client-tests/c/mysql-client-tests -mysql-client-tests/java/MySQLConnectorTest.class -mysql-client-tests/cpp/_build/**/* -mysql-client-tests/cpp/_build +integration-tests/mysql-client-tests/c/mysql-client-tests +integration-tests/mysql-client-tests/java/MySQLConnectorTest.class +integration-tests/mysql-client-tests/cpp/_build/**/* +integration-tests/mysql-client-tests/cpp/_build diff --git a/integration-tests/mysql-client-tests/.gitignore b/integration-tests/mysql-client-tests/.gitignore new file mode 100644 index 0000000000..6877600bfd --- /dev/null +++ b/integration-tests/mysql-client-tests/.gitignore @@ -0,0 +1,5 @@ +c/mysql-connector-c-test +cpp/_build +java/MySQLConnectorTest.class +java/mysql-connector-java-8.0.21.jar +node/node_modules/ \ No newline at end of file diff --git a/integration-tests/mysql-client-tests/README.md b/integration-tests/mysql-client-tests/README.md new file mode 100644 index 0000000000..071add29c5 --- /dev/null +++ b/integration-tests/mysql-client-tests/README.md @@ -0,0 +1,28 @@ +## MySQL Client Tests +We created smoke tests for Dolt's MySQL client integrations and we run these tests through Github Actions +on pull requests. + +These tests can be run locally using Docker. From the root directory of this repo, run: +```bash +$ docker build -t mysql-client-tests -f MySQLDockerfile . +$ docker run mysql-client-tests:latest +``` + +The `docker build` step will take a few minutes to complete as it needs to install all of the +dependencies in the image. + +Running the built container will produce output like: +```bash +$ docker run mysql-client-tests:latest +updating dolt config for tests: +Config successfully updated. +Config successfully updated. +Config successfully updated. +Config successfully updated. +Running mysql-client-tests: +1..4 +ok 1 python mysql.connector client +ok 2 python pymysql client +ok 3 mysql-connector-java client +ok 4 node mysql client +``` diff --git a/integration-tests/mysql-client-tests/c/Makefile b/integration-tests/mysql-client-tests/c/Makefile new file mode 100644 index 0000000000..fdb63ba5cc --- /dev/null +++ b/integration-tests/mysql-client-tests/c/Makefile @@ -0,0 +1,11 @@ +CFLAGS := $(shell pkg-config --cflags mysqlclient) +LDFLAGS := $(shell pkg-config --libs mysqlclient) + +all: mysql-connector-c-test + +mysql-connector-c-test: mysql-connector-c-test.c + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +.PHONY: clean +clean: + rm -f mysql-connector-c-test diff --git a/integration-tests/mysql-client-tests/c/mysql-connector-c-test.c b/integration-tests/mysql-client-tests/c/mysql-connector-c-test.c new file mode 100644 index 0000000000..7adfb3b50f --- /dev/null +++ b/integration-tests/mysql-client-tests/c/mysql-connector-c-test.c @@ -0,0 +1,170 @@ +#include +#include +#include +#include + +#define QUERIES_SIZE 5 + +char *queries[QUERIES_SIZE] = + { + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test" + }; + +typedef struct statement_t { + char *query; + MYSQL_BIND bind[10]; + int expect_prepare_error; + int expect_exec_error; +} statement; + +void test_statement(MYSQL *con, statement *stmt) { + MYSQL_STMT *mstmt = mysql_stmt_init(con); + if (!mstmt) { + fprintf(stderr, "failed to init stmt: %s\n", mysql_error(con)); + exit(1); + } + if ( mysql_stmt_prepare(mstmt, stmt->query, strlen(stmt->query)) ) { + if ( !stmt->expect_prepare_error) { + fprintf(stderr, "failed to prepare stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); + exit(1); + } else { + goto close; + } + } + if ( mysql_stmt_bind_param(mstmt, stmt->bind) ) { + fprintf(stderr, "failed to bind stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); + exit(1); + } + if ( mysql_stmt_execute(mstmt) ) { + if ( !stmt->expect_exec_error) { + fprintf(stderr, "failed to execute stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); + exit(1); + } + } +close: + if ( mysql_stmt_close(mstmt) ) { + fprintf(stderr, "failed to close stmt: %s: %s\n", stmt->query, mysql_error(con)); + exit(1); + } +} + +statement LAST_STATEMENT = { +}; + +int main(int argc, char **argv) { + + char* user = argv[1]; + int port = atoi(argv[2]); + char* db = argv[3]; + + MYSQL *con = mysql_init(NULL); + + if ( con == NULL ) { + fprintf(stderr, "%s\n", mysql_error(con)); + exit(1); + } + + if ( mysql_real_connect(con, + "127.0.0.1", + user, + "", + db, + port, + NULL, + 0 ) == NULL) { + fprintf(stderr, "%s\n", mysql_error(con)); + mysql_close(con); + exit(1); + } + + for ( int i = 0; i < QUERIES_SIZE; i++ ) { + if ( mysql_query(con, queries[i]) ) { + printf("QUERY FAILED: %s\n", queries[i]); + fprintf(stderr, "%s\n", mysql_error(con)); + mysql_close(con); + exit(1); + } else { + // Not checking validity of results for now + MYSQL_RES* result = mysql_use_result(con); + mysql_free_result(result); + } + } + + int pk = 1; + int value = 12; + unsigned long string_len = 16; + statement statements[] = { + { + .query = "select * from test where pk = ?", + .bind = { + [0] = { + .buffer_type = MYSQL_TYPE_LONG, + .buffer = (void *)(&pk), + .buffer_length = sizeof(pk), + }, + }, + }, + { + .query = "select * from test where pk = ?", + .bind = { + [0] = { + .buffer_type = MYSQL_TYPE_LONG, + .buffer = (void *)(&pk), + .buffer_length = sizeof(pk), + .is_unsigned = 1, + }, + }, + }, + { + .query = "insert into test values (?, ?)", + .bind = { + [0] = { + .buffer_type = MYSQL_TYPE_LONG, + .buffer = (void *)(&pk), + .buffer_length = sizeof(pk), + }, + [1] = { + .buffer_type = MYSQL_TYPE_LONG, + .buffer = (void *)(&value), + .buffer_length = sizeof(value), + }, + }, + }, + { + .query = "update test set `value` = ?", + .bind = { + [0] = { + .buffer_type = MYSQL_TYPE_STRING, + .buffer = (void *)"test string here", + .buffer_length = string_len, + .length = &string_len, + }, + }, + .expect_exec_error = 1, + }, + { + .query = "select * from test SYNTAX ERROR where pk = ?", + .bind = { + [0] = { + .buffer_type = MYSQL_TYPE_LONG, + .buffer = (void *)(&pk), + .buffer_length = sizeof(pk), + }, + }, + .expect_prepare_error = 1, + }, + LAST_STATEMENT, + }; + + for (int i = 0; statements[i].query; i++) { + test_statement(con, &statements[i]); + } + + mysql_close(con); + + return 0; +} diff --git a/integration-tests/mysql-client-tests/cpp/CMakeLists.txt b/integration-tests/mysql-client-tests/cpp/CMakeLists.txt new file mode 100644 index 0000000000..fd02d226f2 --- /dev/null +++ b/integration-tests/mysql-client-tests/cpp/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.10) + +project(DoltCxxConnectorTest + VERSION 0.1 + DESCRIPTION "A smoke test for mysql-connector-c++ connecting to Dolt" + LANGUAGES CXX) + +add_executable(test_mysql_connector_cxx mysql-connector-cpp-test.cpp) +set_property(TARGET test_mysql_connector_cxx PROPERTY CXX_STANDARD 11) + +if(WITH_JDBC) + add_subdirectory(third_party/mysql-connector-cpp EXCLUDE_FROM_ALL) + target_link_libraries(test_mysql_connector_cxx connector-jdbc) +else() + find_library(LIBMYSQLCPPCONN "mysqlcppconn") + target_link_libraries(test_mysql_connector_cxx "${LIBMYSQLCPPCONN}") +endif() diff --git a/integration-tests/mysql-client-tests/cpp/Makefile b/integration-tests/mysql-client-tests/cpp/Makefile new file mode 100644 index 0000000000..1a26239014 --- /dev/null +++ b/integration-tests/mysql-client-tests/cpp/Makefile @@ -0,0 +1,14 @@ +MYSQL_CONCPP_DIR = /usr/local/Cellar/mysql-connector-c++/8.0.21 +CPPFLAGS = -I $(MYSQL_CONCPP_DIR)/include -L $(MYSQL_CONCPP_DIR)/lib64 +LDLIBS = -lmysqlcppconn8 +CXX = clang++ -stdlib=libc++ +CXXFLAGS = -std=c++11 + +all: mysql-connector-cpp-test + +mysql-connector-cpp-test: mysql-connector-cpp-test.cpp + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ $^ $(LDLIBS) + +.PHONY: clean +clean: + rm -f mysql-connector-cpp-test diff --git a/integration-tests/mysql-client-tests/cpp/README.md b/integration-tests/mysql-client-tests/cpp/README.md new file mode 100644 index 0000000000..860d255c7b --- /dev/null +++ b/integration-tests/mysql-client-tests/cpp/README.md @@ -0,0 +1,28 @@ +# General + +This code uses git submodules. You need to recursively pull all the submodules +in order for it to build. + +# Building on OS X + +```sh +$ brew install cmake openssl mysql-client boost +$ export PATH=/usr/local/Cellar/mysql-client/8.0.21/bin/:"$PATH" +$ mkdir _build +$ cd _build +$ cmake .. -DWITH_SSL=/usr/local/Cellar/openssl@1.1/1.1.1g/ -DWITH_JDBC=yes +$ make -j 10 +``` + +TODO: These instructions are coupled to openssl and mysql-client version that +happen to be installed... + +# Build on Ubuntu / Debian + +```sh +$ apt-get install g++ cmake libmysqlcppconn-dev +$ mkdir _build +$ cd _build +$ cmake .. +$ make -j 10 +``` diff --git a/integration-tests/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp b/integration-tests/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp new file mode 100644 index 0000000000..3d61c1b3d0 --- /dev/null +++ b/integration-tests/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +#include + + +#include "mysql_driver.h" +#include "mysql_connection.h" +#include "mysql_error.h" +#include "cppconn/connection.h" +#include "cppconn/build_config.h" +#include "cppconn/resultset.h" +#include "cppconn/sqlstring.h" +#include "cppconn/config.h" +#include "cppconn/datatype.h" +#include "cppconn/version_info.h" +#include "cppconn/driver.h" +#include "cppconn/statement.h" +#include "cppconn/metadata.h" +#include "cppconn/warning.h" +#include "cppconn/resultset_metadata.h" +#include "cppconn/parameter_metadata.h" +#include "cppconn/exception.h" +#include "cppconn/prepared_statement.h" +#include "cppconn/variant.h" + +#define QUERIES_SIZE 5 + +std::string queries[QUERIES_SIZE] = + { + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test" + }; + +int is_update[QUERIES_SIZE] = {0,0,0,1,0}; + +int main(int argc, char **argv) { + std::string user = argv[1]; + std::string port = argv[2]; + std::string db = argv[3]; + + sql::mysql::MySQL_Driver *driver; + + sql::Connection *con; + + driver = sql::mysql::get_mysql_driver_instance(); + con = driver->connect("tcp://127.0.0.1:" + port, user, ""); + con->setSchema(db); + + for ( int i = 0; i < QUERIES_SIZE; i++ ) { + try { + sql::Statement *stmt = con->createStatement(); + + if ( is_update[i] ) { + int affected_rows = stmt->executeUpdate(queries[i]); + } else { + sql::ResultSet *res = stmt->executeQuery(queries[i]); + delete res; + } + + delete stmt; + } catch (sql::SQLException &e) { + std::cout << "QUERY: " << queries[i] << std::endl; + std::cout << "# ERR: " << e.what(); + std::cout << " (MySQL error code: " << e.getErrorCode(); + std::cout << ", SQLState: " << e.getSQLState() << " )" << std::endl; + return 1; + } + } + + delete con; + + return 0; +} diff --git a/integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp b/integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp new file mode 160000 index 0000000000..857a8d63d8 --- /dev/null +++ b/integration-tests/mysql-client-tests/cpp/third_party/mysql-connector-cpp @@ -0,0 +1 @@ +Subproject commit 857a8d63d817a17160ca6062ceef6e9d6d0dd128 diff --git a/integration-tests/mysql-client-tests/dotnet/.gitignore b/integration-tests/mysql-client-tests/dotnet/.gitignore new file mode 100644 index 0000000000..da19d74625 --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/.gitignore @@ -0,0 +1,136 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +.vs + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.svclog +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml +*.azurePubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +packages/ +## TODO: If the tool you use requires repositories.config, also uncomment the next line +!packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +![Ss]tyle[Cc]op.targets +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml + +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +_NCrunch* +ZZ \ No newline at end of file diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlClient/Program.cs b/integration-tests/mysql-client-tests/dotnet/MySqlClient/Program.cs new file mode 100644 index 0000000000..3e7f7c6831 --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlClient/Program.cs @@ -0,0 +1,81 @@ +using System; +using System.Data; + +using MySql.Data; +using MySql.Data.MySqlClient; + +class TestException : Exception +{ + public TestException(string message) + { + Console.WriteLine(message); + } +} + +public class DoltSQL +{ + public static int Main(string[] args) + { + if (args.Length != 3) + { + Console.WriteLine("Must supply $USER $PORT $REPO arguments."); + return 1; + } + + var user = args[0]; + var port = args[1]; + var db = args[2]; + + string connStr = $"server=127.0.0.1;user={user};database={db};port={port};CharSet=utf8;"; + MySqlConnection conn = new MySqlConnection(connStr); + + try + { + conn.Open(); + SetupTest(conn); + QueryTest(conn); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + + conn.Close(); + return 0; + } + + public static void SetupTest(MySqlConnection conn) + { + using var cmd = new MySqlCommand(); + cmd.Connection = conn; + + cmd.CommandText = @"CREATE TABLE test (pk int, `value` int, primary key(pk))"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO test(pk, `value`) VALUES(0,0)"; + cmd.ExecuteNonQuery(); + } + + public static void QueryTest(MySqlConnection conn) + { + string sql = "SELECT count(*) as count FROM test"; + using (var cmd = new MySqlCommand(sql, conn)) + try + { + object result = cmd.ExecuteScalar(); + if (result != null) + { + int r = Convert.ToInt32(result); + if (r != 1) + { + TestException ex = new TestException($"Expected 1, Recieved {r}"); + throw ex; + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } +} diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj b/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj new file mode 100644 index 0000000000..557c7a7c8a --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj @@ -0,0 +1,12 @@ + + + + Exe + net5.0 + + + + + + + diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.sln b/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.sln new file mode 100644 index 0000000000..323b0b958d --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlClient/dotnet.sln @@ -0,0 +1,17 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet", "dotnet.csproj", "{E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj new file mode 100755 index 0000000000..c56182acc7 --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj @@ -0,0 +1,12 @@ + + + + Exe + net5.0 + + + + + + + diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln new file mode 100755 index 0000000000..ad6f0ac393 --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MySqlConnectorTest", "MySqlConnectorTest.csproj", "{BF429C29-2191-455B-97E6-271B76B2D1A1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BF429C29-2191-455B-97E6-271B76B2D1A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF429C29-2191-455B-97E6-271B76B2D1A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF429C29-2191-455B-97E6-271B76B2D1A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF429C29-2191-455B-97E6-271B76B2D1A1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/integration-tests/mysql-client-tests/dotnet/MySqlConnector/Program.cs b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/Program.cs new file mode 100755 index 0000000000..a0cc89b6df --- /dev/null +++ b/integration-tests/mysql-client-tests/dotnet/MySqlConnector/Program.cs @@ -0,0 +1,86 @@ +using System; +using MySqlConnector; + +namespace MySqlConnectorTest +{ + class TestException : Exception + { + public TestException(string message) + { + Console.WriteLine(message); + } + } + + class Program + { + static int Main(string[] args) + { + if (args.Length != 3) + { + Console.WriteLine("Must supply $USER $PORT $REPO arguments."); + return 1; + } + + var user = args[0]; + var port = args[1]; + var db = args[2]; + + using (var conn = new MySqlConnection($"Server=127.0.0.1;User ID={user};port={port};Database={db}")) + { + try + { + conn.Open(); + SetupTest(conn); + for (int i = 0; i < 10; i++) + { + QueryTest(conn); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + return 1; + } + + conn.Close(); + } + + return 0; + } + + public static void SetupTest(MySqlConnection conn) + { + using var cmd = new MySqlCommand(); + cmd.Connection = conn; + + cmd.CommandText = @"CREATE TABLE test (pk int, `value` int, primary key(pk))"; + cmd.ExecuteNonQuery(); + + cmd.CommandText = "INSERT INTO test(pk, `value`) VALUES(0,0)"; + cmd.ExecuteNonQuery(); + } + + public static void QueryTest(MySqlConnection conn) + { + string sql = "SELECT count(*) as count FROM test"; + using (var cmd = new MySqlCommand(sql, conn)) + try + { + object result = cmd.ExecuteScalar(); + if (result != null) + { + int r = Convert.ToInt32(result); + if (r != 1) + { + TestException ex = new TestException($"Expected 1, Recieved {r}"); + throw ex; + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + } +} diff --git a/integration-tests/mysql-client-tests/go/go-sql-driver-mysql-test.go b/integration-tests/mysql-client-tests/go/go-sql-driver-mysql-test.go new file mode 100644 index 0000000000..d0aa1bedff --- /dev/null +++ b/integration-tests/mysql-client-tests/go/go-sql-driver-mysql-test.go @@ -0,0 +1,117 @@ +package main + +import ( + "os" + "fmt" + "database/sql" + + _ "github.com/go-sql-driver/mysql" +) + +var queries [5]string = [5]string{ + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test"} + +type ResFunc func(rows *sql.Rows) error + +type StmtTest struct { + Query string + Args []interface{} + Res []ResFunc +} + +var stmtTests []StmtTest = []StmtTest { + { + "select * from test where pk = ?", + []interface{}{int64(0)}, + []ResFunc{ + func (rows *sql.Rows) error { + var pk, value int64 + if err := rows.Scan(&pk, &value); err != nil { + return err + } + if pk != 0 || value != 0 { + return fmt.Errorf("Unexpected values for pk or value: %d, %d", pk, value) + } + return nil + }, + }, + }, +} + +func main() { + var user = os.Args[1] + var port = os.Args[2] + var db = os.Args[3] + + var dsn = user + "@tcp(127.0.0.1:" + port + ")/" + db + fmt.Println(dsn) + + database, err := sql.Open("mysql", dsn) + + if err != nil { + panic(err) + } + + defer database.Close() + + // Ping opens a connection + err = database.Ping() + if err != nil { + panic(err) + } + + for _, query := range queries { + rows, err := database.Query(query) + if err != nil { + fmt.Println("QUERY: " + query) + panic(err) + } + + // Ignoring result as only way to get results is rows.Next() + // Requires custom typoing of the results. + + rows.Close() + } + + for _, test := range stmtTests { + func() { + stmt, err := database.Prepare(test.Query) + if err != nil { + panic(fmt.Sprintf("err on prepare: %s: %v", test.Query, err)) + } + defer func() { + if err := stmt.Close(); err != nil { + panic(fmt.Sprintf("err on stmt.Close(): %s: %v", test.Query, err)) + } + }() + rows, err := stmt.Query(test.Args...) + if err != nil { + panic(fmt.Sprintf("err on query: %s: %v", test.Query, err)) + } + defer func() { + if err := rows.Close(); err != nil { + panic(fmt.Sprintf("err on rows.Close(): %s: %v", test.Query, err)) + } + }() + i := 0 + for rows.Next() { + if i >= len(test.Res) { + panic(fmt.Sprintf("statement returned more results than expected: %s: %v", test.Query, err)) + } + if err := test.Res[i](rows); err != nil { + panic(fmt.Sprintf("test.Res returned error: %d: %s: %v", i, test.Query, err)) + } + i += 1 + } + if err := rows.Err(); err != nil { + panic(fmt.Sprintf("err on rows.Err(): %s: %v", test.Query, err)) + } + }() + } + + os.Exit(0) +} diff --git a/integration-tests/mysql-client-tests/java/MySQLConnectorTest.java b/integration-tests/mysql-client-tests/java/MySQLConnectorTest.java new file mode 100644 index 0000000000..3c659dd130 --- /dev/null +++ b/integration-tests/mysql-client-tests/java/MySQLConnectorTest.java @@ -0,0 +1,74 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.ResultSet; + +public class MySQLConnectorTest { + public static void main(String[] args) { + Connection conn = null; + + String user = args[0]; + String port = args[1]; + String db = args[2]; + + try { + String url = "jdbc:mysql://127.0.0.1:" + port + "/" + db; + + String password = ""; + + conn = DriverManager.getConnection(url, user, password); + + Statement st = conn.createStatement(); + + String[] queries = { + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test" + }; + + // Only test the first row, column pair for now + String[] results = { + "0", + "pk", + null, + "1", + "0" + }; + + for (int i = 0; i < queries.length; i++) { + String query = queries[i]; + String expected = results[i]; + if ( st.execute(query) ) { + ResultSet rs = st.getResultSet(); + if (rs.next()) { + String result = rs.getString(1); + if ( !expected.equals(result) ) { + System.out.println("Query: \n" + query); + System.out.println("Expected:\n" + expected); + System.out.println("Result:\n" + result); + System.exit(1); + } + } + } else { + String result = Integer.toString(st.getUpdateCount()); + if ( !expected.equals(result) ) { + System.out.println("Query: \n" + query); + System.out.println("Expected:\n" + expected); + System.out.println("Rows Updated:\n" + result); + System.exit(1); + } + } + } + + System.exit(0); + + } catch (SQLException ex) { + System.out.println("An error occurred."); + ex.printStackTrace(); + System.exit(1); + } + } +} diff --git a/integration-tests/mysql-client-tests/mysql-client-tests-entrypoint.sh b/integration-tests/mysql-client-tests/mysql-client-tests-entrypoint.sh new file mode 100755 index 0000000000..9ee3bc7e83 --- /dev/null +++ b/integration-tests/mysql-client-tests/mysql-client-tests-entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +echo "Updating dolt config for tests:" +dolt config --global --add metrics.disabled true +dolt config --global --add metrics.host localhost +dolt config --global --add user.name mysql-test-runner +dolt config --global --add user.email mysql-test-runner@liquidata.co + +echo "Running mysql-client-tests:" +bats /mysql-client-tests/mysql-client-tests.bats diff --git a/integration-tests/mysql-client-tests/mysql-client-tests.bats b/integration-tests/mysql-client-tests/mysql-client-tests.bats new file mode 100644 index 0000000000..09396acf80 --- /dev/null +++ b/integration-tests/mysql-client-tests/mysql-client-tests.bats @@ -0,0 +1,97 @@ +# MySQL client tests are set up to test Dolt as a MySQL server and +# standard MySQL Clients in a wide array of languages. I used BATS because +# it was easy to set up the Dolt piece using the command line. +# +# We create a Dolt database and start a server in the setup(). Then, each test +# will attempt to access the server through a client. We'll do some basic +# reads and writes to make sure the client works. As we discover any +# gotchas, we can add tests for that specific language. + +setup() { + REPO_NAME="dolt_repo_$$" + mkdir $REPO_NAME + cd $REPO_NAME + + dolt init + let PORT="$$ % (65536-1024) + 1024" + USER="dolt" + dolt sql-server --host 0.0.0.0 --port=$PORT --user=$USER --loglevel=trace & + SERVER_PID=$! + # Give the server a chance to start + sleep 1 +} + +teardown() { + cd .. + kill $SERVER_PID + rm -rf $REPO_NAME +} + +@test "go go-sql-drive/mysql test" { + go run $BATS_TEST_DIRNAME/go/go-sql-driver-mysql-test.go $USER $PORT $REPO_NAME +} + +@test "python mysql.connector client" { + python3 $BATS_TEST_DIRNAME/python/mysql.connector-test.py $USER $PORT $REPO_NAME +} + +@test "python pymysql client" { + python3 $BATS_TEST_DIRNAME/python/pymysql-test.py $USER $PORT $REPO_NAME +} + +@test "python sqlachemy client" { + python3 $BATS_TEST_DIRNAME/python/sqlalchemy-test.py $USER $PORT $REPO_NAME +} + +@test "mysql-connector-java client" { + javac $BATS_TEST_DIRNAME/java/MySQLConnectorTest.java + java -cp $BATS_TEST_DIRNAME/java:$BATS_TEST_DIRNAME/java/mysql-connector-java-8.0.21.jar MySQLConnectorTest $USER $PORT $REPO_NAME +} + +@test "node mysql client" { + node $BATS_TEST_DIRNAME/node/index.js $USER $PORT $REPO_NAME +} + +@test "c mysql connector" { + (cd $BATS_TEST_DIRNAME/c; make clean; make) + $BATS_TEST_DIRNAME/c/mysql-connector-c-test $USER $PORT $REPO_NAME +} + +@test "cpp mysql connector" { + if [ -d $BATS_TEST_DIRNAME/cpp/_build ] + then + rm -rf $BATS_TEST_DIRNAME/cpp/_build/* + else + mkdir $BATS_TEST_DIRNAME/cpp/_build + fi + cd $BATS_TEST_DIRNAME/cpp/_build + if [[ `uname` = "Darwin" ]]; then + PATH=/usr/local/Cellar/mysql-client/8.0.21/bin/:"$PATH" cmake .. -DWITH_SSL=/usr/local/Cellar/openssl@1.1/1.1.1g/ -DWITH_JDBC=yes; + else + cmake .. + fi +cmake .. + make -j 10 + $BATS_TEST_DIRNAME/cpp/_build/test_mysql_connector_cxx $USER $PORT $REPO_NAME + cd - +} + +@test "dotnet mysql connector" { + cd $BATS_TEST_DIRNAME/dotnet/MySqlConnector + # dotnet run uses output channel 3 which conflicts with bats so we pipe it to null + dotnet run -- $USER $PORT $REPO_NAME 3>&- +} + +@test "dotnet mysql client" { + cd $BATS_TEST_DIRNAME/dotnet/MySqlClient + # dotnet run uses output channel 3 which conflicts with bats so we pipe it to null + dotnet run -- $USER $PORT $REPO_NAME 3>&- +} + +@test "perl DBD:mysql client" { + perl $BATS_TEST_DIRNAME/perl/dbd-mysql-test.pl $USER $PORT $REPO_NAME +} + +@test "ruby ruby/mysql test" { + ruby $BATS_TEST_DIRNAME/ruby/ruby-mysql-test.rb $USER $PORT $REPO_NAME +} diff --git a/integration-tests/mysql-client-tests/node/index.js b/integration-tests/mysql-client-tests/node/index.js new file mode 100644 index 0000000000..164807ea94 --- /dev/null +++ b/integration-tests/mysql-client-tests/node/index.js @@ -0,0 +1,109 @@ +const mysql = require('mysql'); + +const args = process.argv.slice(2); + +const user = args[0]; +const port = args[1]; +const db = args[2]; + +const config = { + host: '127.0.0.1', + user: user, + port: port, + database: db +}; + +class Database { + constructor( config ) { + this.connection = mysql.createConnection( config ); + this.connection.connect(); + } + + query( sql, args ) { + return new Promise( ( resolve, reject ) => { + this.connection.query( sql, args, ( err, rows ) => { + if ( err ) + return reject( err ); + return resolve( rows ); + } ); + } ); + } + close() { + this.connection.end(err => { + if (err) { + console.error(err) + } else { + console.log("db connection closed") + } + }) + } +} + +async function main() { + const queries = [ + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test" + ]; + + const results = [ + [], + [ { Field: 'pk', + Type: 'int', + Null: 'NO', + Key: 'PRI', + Default: '', + Extra: '' }, + { Field: 'value', + Type: 'int', + Null: 'YES', + Key: '', + Default: '', + Extra: '' } + ], + [], + { + fieldCount: 0, + affectedRows: 1, + insertId: 0, + serverStatus: 0, + warningCount: 0, + message: '', + protocol41: true, + changedRows: 0 + }, + [ { pk: 0, value: 0 } ] + ]; + + const database = new Database(config); + + await Promise.all(queries.map((query, idx) => { + const expected = results[idx]; + return database.query(query).then(rows => { + const resultStr = JSON.stringify(rows); + const result = JSON.parse(resultStr); + if (resultStr !== JSON.stringify(expected) ) { + console.log("Query:", query); + console.log("Results:", result); + console.log("Expected:", expected); + throw new Error("Query failed") + } else { + console.log("Query succeeded:", query) + } + }).catch(err => { + console.error(err) + process.exit(1); + }); + })); + + database.close() + process.exit(0) +} + +main(); + + + + diff --git a/integration-tests/mysql-client-tests/node/package-lock.json b/integration-tests/mysql-client-tests/node/package-lock.json new file mode 100644 index 0000000000..283460d30a --- /dev/null +++ b/integration-tests/mysql-client-tests/node/package-lock.json @@ -0,0 +1,81 @@ +{ + "name": "node", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "requires": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/integration-tests/mysql-client-tests/node/package.json b/integration-tests/mysql-client-tests/node/package.json new file mode 100644 index 0000000000..dec3bc09e8 --- /dev/null +++ b/integration-tests/mysql-client-tests/node/package.json @@ -0,0 +1,14 @@ +{ + "name": "node", + "version": "1.0.0", + "description": "A simple node command line utility to show how to connect a node application to a Dolt database using the MySQL connector.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "mysql": "^2.18.1" + } +} diff --git a/integration-tests/mysql-client-tests/perl/dbd-mysql-test.pl b/integration-tests/mysql-client-tests/perl/dbd-mysql-test.pl new file mode 100644 index 0000000000..f4e6aba589 --- /dev/null +++ b/integration-tests/mysql-client-tests/perl/dbd-mysql-test.pl @@ -0,0 +1,33 @@ +use strict; + +use DBI; + +my $QUERY_RESPONSE = [ + { "create table test (pk int, `value` int, primary key(pk))" => '0E0' }, + { "describe test" => 2 }, + { "insert into test (pk, `value`) values (0,0)" => 1 }, + { "select * from test" => 1 } + ]; + +my $user = $ARGV[0]; +my $port = $ARGV[1]; +my $db = $ARGV[2]; + +my $dsn = "DBI:mysql:database=$db;host=127.0.0.1;port=$port"; +my $dbh = DBI->connect($dsn, $user, ""); + +foreach my $query_response ( @{$QUERY_RESPONSE} ) { + my @query_keys = keys %{$query_response}; + my $query = $query_keys[0]; + my $exp_result = $query_response->{$query}; + + my $result = $dbh->do($query); + if ( $result != $exp_result ) { + print "QUERY: $query\n"; + print "EXPECTED: $exp_result\n"; + print "RESULT: $result\n"; + exit 1 + } +} + +exit 0; diff --git a/integration-tests/mysql-client-tests/python/mysql.connector-test.py b/integration-tests/mysql-client-tests/python/mysql.connector-test.py new file mode 100644 index 0000000000..0517d95e4b --- /dev/null +++ b/integration-tests/mysql-client-tests/python/mysql.connector-test.py @@ -0,0 +1,51 @@ +import mysql.connector +import sys + +QUERY_RESPONSE = [ + { "create table test (pk int, `value` int, primary key(pk))": [] }, + { "describe test": [ + ('pk', 'int', 'NO', 'PRI', '', ''), + ('value', 'int', 'YES', '', '', '') + ] }, + { "insert into test (pk, `value`) values (0,0)": [] }, + { "select * from test": [(0,0)] } +] + +def main(): + user = sys.argv[1] + port = sys.argv[2] + db = sys.argv[3] + + connection = mysql.connector.connect(user=user, + host="127.0.0.1", + port=port, + database=db) + + for query_response in QUERY_RESPONSE: + query = list(query_response.keys())[0] + exp_results = query_response[query] + cursor = connection.cursor() + cursor.execute(query) + try: + results = cursor.fetchall() + print(exp_results) + print(results) + if ( results != exp_results ): + print("Query:") + print(query) + print("Expected:") + print(exp_results) + print("Received:") + print(results) + exit(1) + except mysql.connector.errors.InterfaceError: + # This is a write query + pass + + cursor.close() + + connection.close() + + exit(0) + +main() diff --git a/integration-tests/mysql-client-tests/python/pymysql-test.py b/integration-tests/mysql-client-tests/python/pymysql-test.py new file mode 100644 index 0000000000..9334566d2f --- /dev/null +++ b/integration-tests/mysql-client-tests/python/pymysql-test.py @@ -0,0 +1,43 @@ +import pymysql +import sys + +QUERY_RESPONSE = [ + { "create table test (pk int, `value` int, primary key(pk))": () }, + { "describe test": ( + ('pk', 'int', 'NO', 'PRI', '', ''), + ('value', 'int', 'YES', '', '', '') + ) }, + { "insert into test (pk, `value`) values (0,0)": () }, + { "select * from test": ((0,0),) } +] + +def main(): + user = sys.argv[1] + port = int(sys.argv[2]) + db = sys.argv[3] + + connection = pymysql.connect(host="127.0.0.1", + port=port, + user=user, + db=db) + + for query_response in QUERY_RESPONSE: + query = list(query_response.keys())[0] + exp_results = query_response[query] + with connection.cursor() as cursor: + cursor.execute(query) + results = cursor.fetchall() + if ( results != exp_results ): + print("Query:") + print(query) + print("Expected:") + print(exp_results) + print("Received:") + print(results) + exit(1) + + connection.close() + + exit(0) + +main() diff --git a/integration-tests/mysql-client-tests/python/sqlalchemy-test.py b/integration-tests/mysql-client-tests/python/sqlalchemy-test.py new file mode 100644 index 0000000000..6fcee84347 --- /dev/null +++ b/integration-tests/mysql-client-tests/python/sqlalchemy-test.py @@ -0,0 +1,56 @@ +import sqlalchemy + +from sqlalchemy.engine import Engine +from sqlalchemy import create_engine + +import sys + +QUERY_RESPONSE = [ + { "create table test (pk int, `value` int, primary key(pk))": [] }, + { "describe test": [ + ('pk', 'int', 'NO', 'PRI', '', ''), + ('value', 'int', 'YES', '', '', '') + ] }, + { "insert into test (pk, `value`) values (0,0)": () }, + { "select * from test": [(0,0)] } +] + +def main(): + user = sys.argv[1] + port = int(sys.argv[2]) + db = sys.argv[3] + + conn_string_base = "mysql+mysqlconnector://" + + engine = create_engine(conn_string_base + + "{user}@127.0.0.1:{port}/{db}".format(user=user, + port=port, + db=db) + ) + + with engine.connect() as con: + for query_response in QUERY_RESPONSE: + query = list(query_response.keys())[0] + exp_results = query_response[query] + + result_proxy = con.execute(query) + + try: + results = result_proxy.fetchall() + if ( results != exp_results ): + print("Query:") + print(query) + print("Expected:") + print(exp_results) + print("Received:") + print(results) + exit(1) + # You can't call fetchall on an insert + # so we'll just ignore the exception + except sqlalchemy.exc.ResourceClosedError: + pass + + con.close() + exit(0) + +main() diff --git a/integration-tests/mysql-client-tests/ruby/Gemfile b/integration-tests/mysql-client-tests/ruby/Gemfile new file mode 100644 index 0000000000..dc16b4631f --- /dev/null +++ b/integration-tests/mysql-client-tests/ruby/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'ruby-mysql', '~> 2.9', '>= 2.9.14' diff --git a/integration-tests/mysql-client-tests/ruby/Gemfile.lock b/integration-tests/mysql-client-tests/ruby/Gemfile.lock new file mode 100644 index 0000000000..3ba0884177 --- /dev/null +++ b/integration-tests/mysql-client-tests/ruby/Gemfile.lock @@ -0,0 +1,13 @@ +GEM + remote: https://rubygems.org/ + specs: + ruby-mysql (2.9.14) + +PLATFORMS + ruby + +DEPENDENCIES + ruby-mysql (~> 2.9, >= 2.9.14) + +BUNDLED WITH + 2.1.4 diff --git a/integration-tests/mysql-client-tests/ruby/ruby-mysql-test.rb b/integration-tests/mysql-client-tests/ruby/ruby-mysql-test.rb new file mode 100644 index 0000000000..e990a6e5d0 --- /dev/null +++ b/integration-tests/mysql-client-tests/ruby/ruby-mysql-test.rb @@ -0,0 +1,23 @@ +#!/usr/bin/ruby + +require 'mysql' + +user = ARGV[0] +port = ARGV[1] +db = ARGV[2] + +queries = [ + "create table test (pk int, `value` int, primary key(pk))", + "describe test", + "select * from test", + "insert into test (pk, `value`) values (0,0)", + "select * from test" +] + +conn = Mysql::new("127.0.0.1", user, "", db, port) +queries.each do |query| + res = conn.query(query) +end +conn.close() + +exit(0) diff --git a/mysql-client-tests/cpp/third_party/mysql-connector-cpp b/mysql-client-tests/cpp/third_party/mysql-connector-cpp deleted file mode 160000 index 6b2fc10205..0000000000 --- a/mysql-client-tests/cpp/third_party/mysql-connector-cpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6b2fc1020534b908f90610f5ebdcf36a7df67cfd From 567ee751659cc0445c03f17cf89384c56e9856ba Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 15 Mar 2021 12:54:21 -0700 Subject: [PATCH 2/3] /mysql-client-tests: remove old dir --- mysql-client-tests/.gitignore | 5 - mysql-client-tests/README.md | 28 --- mysql-client-tests/c/Makefile | 11 -- mysql-client-tests/c/mysql-connector-c-test.c | 170 ------------------ mysql-client-tests/cpp/CMakeLists.txt | 17 -- mysql-client-tests/cpp/Makefile | 14 -- mysql-client-tests/cpp/README.md | 28 --- .../cpp/mysql-connector-cpp-test.cpp | 77 -------- mysql-client-tests/dotnet/.gitignore | 136 -------------- .../dotnet/MySqlClient/Program.cs | 81 --------- .../dotnet/MySqlClient/dotnet.csproj | 12 -- .../dotnet/MySqlClient/dotnet.sln | 17 -- .../MySqlConnector/MySqlConnectorTest.csproj | 12 -- .../MySqlConnector/MySqlConnectorTest.sln | 16 -- .../dotnet/MySqlConnector/Program.cs | 86 --------- .../go/go-sql-driver-mysql-test.go | 117 ------------ .../java/MySQLConnectorTest.java | 74 -------- mysql-client-tests/mysql-client-tests.bats | 97 ---------- mysql-client-tests/node/index.js | 109 ----------- mysql-client-tests/node/package-lock.json | 81 --------- mysql-client-tests/node/package.json | 14 -- mysql-client-tests/perl/dbd-mysql-test.pl | 33 ---- .../python/mysql.connector-test.py | 51 ------ mysql-client-tests/python/pymysql-test.py | 43 ----- mysql-client-tests/python/sqlalchemy-test.py | 56 ------ mysql-client-tests/ruby/Gemfile | 2 - mysql-client-tests/ruby/Gemfile.lock | 13 -- mysql-client-tests/ruby/ruby-mysql-test.rb | 23 --- 28 files changed, 1423 deletions(-) delete mode 100644 mysql-client-tests/.gitignore delete mode 100644 mysql-client-tests/README.md delete mode 100644 mysql-client-tests/c/Makefile delete mode 100644 mysql-client-tests/c/mysql-connector-c-test.c delete mode 100644 mysql-client-tests/cpp/CMakeLists.txt delete mode 100644 mysql-client-tests/cpp/Makefile delete mode 100644 mysql-client-tests/cpp/README.md delete mode 100644 mysql-client-tests/cpp/mysql-connector-cpp-test.cpp delete mode 100644 mysql-client-tests/dotnet/.gitignore delete mode 100644 mysql-client-tests/dotnet/MySqlClient/Program.cs delete mode 100644 mysql-client-tests/dotnet/MySqlClient/dotnet.csproj delete mode 100644 mysql-client-tests/dotnet/MySqlClient/dotnet.sln delete mode 100755 mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj delete mode 100755 mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln delete mode 100755 mysql-client-tests/dotnet/MySqlConnector/Program.cs delete mode 100644 mysql-client-tests/go/go-sql-driver-mysql-test.go delete mode 100644 mysql-client-tests/java/MySQLConnectorTest.java delete mode 100644 mysql-client-tests/mysql-client-tests.bats delete mode 100644 mysql-client-tests/node/index.js delete mode 100644 mysql-client-tests/node/package-lock.json delete mode 100644 mysql-client-tests/node/package.json delete mode 100644 mysql-client-tests/perl/dbd-mysql-test.pl delete mode 100644 mysql-client-tests/python/mysql.connector-test.py delete mode 100644 mysql-client-tests/python/pymysql-test.py delete mode 100644 mysql-client-tests/python/sqlalchemy-test.py delete mode 100644 mysql-client-tests/ruby/Gemfile delete mode 100644 mysql-client-tests/ruby/Gemfile.lock delete mode 100644 mysql-client-tests/ruby/ruby-mysql-test.rb diff --git a/mysql-client-tests/.gitignore b/mysql-client-tests/.gitignore deleted file mode 100644 index 6877600bfd..0000000000 --- a/mysql-client-tests/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -c/mysql-connector-c-test -cpp/_build -java/MySQLConnectorTest.class -java/mysql-connector-java-8.0.21.jar -node/node_modules/ \ No newline at end of file diff --git a/mysql-client-tests/README.md b/mysql-client-tests/README.md deleted file mode 100644 index 071add29c5..0000000000 --- a/mysql-client-tests/README.md +++ /dev/null @@ -1,28 +0,0 @@ -## MySQL Client Tests -We created smoke tests for Dolt's MySQL client integrations and we run these tests through Github Actions -on pull requests. - -These tests can be run locally using Docker. From the root directory of this repo, run: -```bash -$ docker build -t mysql-client-tests -f MySQLDockerfile . -$ docker run mysql-client-tests:latest -``` - -The `docker build` step will take a few minutes to complete as it needs to install all of the -dependencies in the image. - -Running the built container will produce output like: -```bash -$ docker run mysql-client-tests:latest -updating dolt config for tests: -Config successfully updated. -Config successfully updated. -Config successfully updated. -Config successfully updated. -Running mysql-client-tests: -1..4 -ok 1 python mysql.connector client -ok 2 python pymysql client -ok 3 mysql-connector-java client -ok 4 node mysql client -``` diff --git a/mysql-client-tests/c/Makefile b/mysql-client-tests/c/Makefile deleted file mode 100644 index fdb63ba5cc..0000000000 --- a/mysql-client-tests/c/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -CFLAGS := $(shell pkg-config --cflags mysqlclient) -LDFLAGS := $(shell pkg-config --libs mysqlclient) - -all: mysql-connector-c-test - -mysql-connector-c-test: mysql-connector-c-test.c - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) - -.PHONY: clean -clean: - rm -f mysql-connector-c-test diff --git a/mysql-client-tests/c/mysql-connector-c-test.c b/mysql-client-tests/c/mysql-connector-c-test.c deleted file mode 100644 index 7adfb3b50f..0000000000 --- a/mysql-client-tests/c/mysql-connector-c-test.c +++ /dev/null @@ -1,170 +0,0 @@ -#include -#include -#include -#include - -#define QUERIES_SIZE 5 - -char *queries[QUERIES_SIZE] = - { - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test" - }; - -typedef struct statement_t { - char *query; - MYSQL_BIND bind[10]; - int expect_prepare_error; - int expect_exec_error; -} statement; - -void test_statement(MYSQL *con, statement *stmt) { - MYSQL_STMT *mstmt = mysql_stmt_init(con); - if (!mstmt) { - fprintf(stderr, "failed to init stmt: %s\n", mysql_error(con)); - exit(1); - } - if ( mysql_stmt_prepare(mstmt, stmt->query, strlen(stmt->query)) ) { - if ( !stmt->expect_prepare_error) { - fprintf(stderr, "failed to prepare stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); - exit(1); - } else { - goto close; - } - } - if ( mysql_stmt_bind_param(mstmt, stmt->bind) ) { - fprintf(stderr, "failed to bind stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); - exit(1); - } - if ( mysql_stmt_execute(mstmt) ) { - if ( !stmt->expect_exec_error) { - fprintf(stderr, "failed to execute stmt: %s: %s\n", stmt->query, mysql_stmt_error(mstmt)); - exit(1); - } - } -close: - if ( mysql_stmt_close(mstmt) ) { - fprintf(stderr, "failed to close stmt: %s: %s\n", stmt->query, mysql_error(con)); - exit(1); - } -} - -statement LAST_STATEMENT = { -}; - -int main(int argc, char **argv) { - - char* user = argv[1]; - int port = atoi(argv[2]); - char* db = argv[3]; - - MYSQL *con = mysql_init(NULL); - - if ( con == NULL ) { - fprintf(stderr, "%s\n", mysql_error(con)); - exit(1); - } - - if ( mysql_real_connect(con, - "127.0.0.1", - user, - "", - db, - port, - NULL, - 0 ) == NULL) { - fprintf(stderr, "%s\n", mysql_error(con)); - mysql_close(con); - exit(1); - } - - for ( int i = 0; i < QUERIES_SIZE; i++ ) { - if ( mysql_query(con, queries[i]) ) { - printf("QUERY FAILED: %s\n", queries[i]); - fprintf(stderr, "%s\n", mysql_error(con)); - mysql_close(con); - exit(1); - } else { - // Not checking validity of results for now - MYSQL_RES* result = mysql_use_result(con); - mysql_free_result(result); - } - } - - int pk = 1; - int value = 12; - unsigned long string_len = 16; - statement statements[] = { - { - .query = "select * from test where pk = ?", - .bind = { - [0] = { - .buffer_type = MYSQL_TYPE_LONG, - .buffer = (void *)(&pk), - .buffer_length = sizeof(pk), - }, - }, - }, - { - .query = "select * from test where pk = ?", - .bind = { - [0] = { - .buffer_type = MYSQL_TYPE_LONG, - .buffer = (void *)(&pk), - .buffer_length = sizeof(pk), - .is_unsigned = 1, - }, - }, - }, - { - .query = "insert into test values (?, ?)", - .bind = { - [0] = { - .buffer_type = MYSQL_TYPE_LONG, - .buffer = (void *)(&pk), - .buffer_length = sizeof(pk), - }, - [1] = { - .buffer_type = MYSQL_TYPE_LONG, - .buffer = (void *)(&value), - .buffer_length = sizeof(value), - }, - }, - }, - { - .query = "update test set `value` = ?", - .bind = { - [0] = { - .buffer_type = MYSQL_TYPE_STRING, - .buffer = (void *)"test string here", - .buffer_length = string_len, - .length = &string_len, - }, - }, - .expect_exec_error = 1, - }, - { - .query = "select * from test SYNTAX ERROR where pk = ?", - .bind = { - [0] = { - .buffer_type = MYSQL_TYPE_LONG, - .buffer = (void *)(&pk), - .buffer_length = sizeof(pk), - }, - }, - .expect_prepare_error = 1, - }, - LAST_STATEMENT, - }; - - for (int i = 0; statements[i].query; i++) { - test_statement(con, &statements[i]); - } - - mysql_close(con); - - return 0; -} diff --git a/mysql-client-tests/cpp/CMakeLists.txt b/mysql-client-tests/cpp/CMakeLists.txt deleted file mode 100644 index fd02d226f2..0000000000 --- a/mysql-client-tests/cpp/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(DoltCxxConnectorTest - VERSION 0.1 - DESCRIPTION "A smoke test for mysql-connector-c++ connecting to Dolt" - LANGUAGES CXX) - -add_executable(test_mysql_connector_cxx mysql-connector-cpp-test.cpp) -set_property(TARGET test_mysql_connector_cxx PROPERTY CXX_STANDARD 11) - -if(WITH_JDBC) - add_subdirectory(third_party/mysql-connector-cpp EXCLUDE_FROM_ALL) - target_link_libraries(test_mysql_connector_cxx connector-jdbc) -else() - find_library(LIBMYSQLCPPCONN "mysqlcppconn") - target_link_libraries(test_mysql_connector_cxx "${LIBMYSQLCPPCONN}") -endif() diff --git a/mysql-client-tests/cpp/Makefile b/mysql-client-tests/cpp/Makefile deleted file mode 100644 index 1a26239014..0000000000 --- a/mysql-client-tests/cpp/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -MYSQL_CONCPP_DIR = /usr/local/Cellar/mysql-connector-c++/8.0.21 -CPPFLAGS = -I $(MYSQL_CONCPP_DIR)/include -L $(MYSQL_CONCPP_DIR)/lib64 -LDLIBS = -lmysqlcppconn8 -CXX = clang++ -stdlib=libc++ -CXXFLAGS = -std=c++11 - -all: mysql-connector-cpp-test - -mysql-connector-cpp-test: mysql-connector-cpp-test.cpp - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ $^ $(LDLIBS) - -.PHONY: clean -clean: - rm -f mysql-connector-cpp-test diff --git a/mysql-client-tests/cpp/README.md b/mysql-client-tests/cpp/README.md deleted file mode 100644 index 860d255c7b..0000000000 --- a/mysql-client-tests/cpp/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# General - -This code uses git submodules. You need to recursively pull all the submodules -in order for it to build. - -# Building on OS X - -```sh -$ brew install cmake openssl mysql-client boost -$ export PATH=/usr/local/Cellar/mysql-client/8.0.21/bin/:"$PATH" -$ mkdir _build -$ cd _build -$ cmake .. -DWITH_SSL=/usr/local/Cellar/openssl@1.1/1.1.1g/ -DWITH_JDBC=yes -$ make -j 10 -``` - -TODO: These instructions are coupled to openssl and mysql-client version that -happen to be installed... - -# Build on Ubuntu / Debian - -```sh -$ apt-get install g++ cmake libmysqlcppconn-dev -$ mkdir _build -$ cd _build -$ cmake .. -$ make -j 10 -``` diff --git a/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp b/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp deleted file mode 100644 index 3d61c1b3d0..0000000000 --- a/mysql-client-tests/cpp/mysql-connector-cpp-test.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include -#include - - -#include "mysql_driver.h" -#include "mysql_connection.h" -#include "mysql_error.h" -#include "cppconn/connection.h" -#include "cppconn/build_config.h" -#include "cppconn/resultset.h" -#include "cppconn/sqlstring.h" -#include "cppconn/config.h" -#include "cppconn/datatype.h" -#include "cppconn/version_info.h" -#include "cppconn/driver.h" -#include "cppconn/statement.h" -#include "cppconn/metadata.h" -#include "cppconn/warning.h" -#include "cppconn/resultset_metadata.h" -#include "cppconn/parameter_metadata.h" -#include "cppconn/exception.h" -#include "cppconn/prepared_statement.h" -#include "cppconn/variant.h" - -#define QUERIES_SIZE 5 - -std::string queries[QUERIES_SIZE] = - { - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test" - }; - -int is_update[QUERIES_SIZE] = {0,0,0,1,0}; - -int main(int argc, char **argv) { - std::string user = argv[1]; - std::string port = argv[2]; - std::string db = argv[3]; - - sql::mysql::MySQL_Driver *driver; - - sql::Connection *con; - - driver = sql::mysql::get_mysql_driver_instance(); - con = driver->connect("tcp://127.0.0.1:" + port, user, ""); - con->setSchema(db); - - for ( int i = 0; i < QUERIES_SIZE; i++ ) { - try { - sql::Statement *stmt = con->createStatement(); - - if ( is_update[i] ) { - int affected_rows = stmt->executeUpdate(queries[i]); - } else { - sql::ResultSet *res = stmt->executeQuery(queries[i]); - delete res; - } - - delete stmt; - } catch (sql::SQLException &e) { - std::cout << "QUERY: " << queries[i] << std::endl; - std::cout << "# ERR: " << e.what(); - std::cout << " (MySQL error code: " << e.getErrorCode(); - std::cout << ", SQLState: " << e.getSQLState() << " )" << std::endl; - return 1; - } - } - - delete con; - - return 0; -} diff --git a/mysql-client-tests/dotnet/.gitignore b/mysql-client-tests/dotnet/.gitignore deleted file mode 100644 index da19d74625..0000000000 --- a/mysql-client-tests/dotnet/.gitignore +++ /dev/null @@ -1,136 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -.vs - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results - -[Dd]ebug/ -[Rr]elease/ -x64/ -[Bb]in/ -[Oo]bj/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.log -*.svclog -*.scc - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# Click-Once directory -publish/ - -# Publish Web Output -*.Publish.xml -*.pubxml -*.azurePubxml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -packages/ -## TODO: If the tool you use requires repositories.config, also uncomment the next line -!packages/repositories.config - -# Windows Azure Build Output -csx/ -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -![Ss]tyle[Cc]op.targets -~$* -*~ -*.dbmdl -*.[Pp]ublish.xml - -*.publishsettings - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -App_Data/*.mdf -App_Data/*.ldf - -# ========================= -# Windows detritus -# ========================= - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Mac desktop service store files -.DS_Store - -_NCrunch* -ZZ \ No newline at end of file diff --git a/mysql-client-tests/dotnet/MySqlClient/Program.cs b/mysql-client-tests/dotnet/MySqlClient/Program.cs deleted file mode 100644 index 3e7f7c6831..0000000000 --- a/mysql-client-tests/dotnet/MySqlClient/Program.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Data; - -using MySql.Data; -using MySql.Data.MySqlClient; - -class TestException : Exception -{ - public TestException(string message) - { - Console.WriteLine(message); - } -} - -public class DoltSQL -{ - public static int Main(string[] args) - { - if (args.Length != 3) - { - Console.WriteLine("Must supply $USER $PORT $REPO arguments."); - return 1; - } - - var user = args[0]; - var port = args[1]; - var db = args[2]; - - string connStr = $"server=127.0.0.1;user={user};database={db};port={port};CharSet=utf8;"; - MySqlConnection conn = new MySqlConnection(connStr); - - try - { - conn.Open(); - SetupTest(conn); - QueryTest(conn); - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - } - - conn.Close(); - return 0; - } - - public static void SetupTest(MySqlConnection conn) - { - using var cmd = new MySqlCommand(); - cmd.Connection = conn; - - cmd.CommandText = @"CREATE TABLE test (pk int, `value` int, primary key(pk))"; - cmd.ExecuteNonQuery(); - - cmd.CommandText = "INSERT INTO test(pk, `value`) VALUES(0,0)"; - cmd.ExecuteNonQuery(); - } - - public static void QueryTest(MySqlConnection conn) - { - string sql = "SELECT count(*) as count FROM test"; - using (var cmd = new MySqlCommand(sql, conn)) - try - { - object result = cmd.ExecuteScalar(); - if (result != null) - { - int r = Convert.ToInt32(result); - if (r != 1) - { - TestException ex = new TestException($"Expected 1, Recieved {r}"); - throw ex; - } - } - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - } - } -} diff --git a/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj b/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj deleted file mode 100644 index 557c7a7c8a..0000000000 --- a/mysql-client-tests/dotnet/MySqlClient/dotnet.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - Exe - net5.0 - - - - - - - diff --git a/mysql-client-tests/dotnet/MySqlClient/dotnet.sln b/mysql-client-tests/dotnet/MySqlClient/dotnet.sln deleted file mode 100644 index 323b0b958d..0000000000 --- a/mysql-client-tests/dotnet/MySqlClient/dotnet.sln +++ /dev/null @@ -1,17 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet", "dotnet.csproj", "{E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E77B5EEB-5826-4C3A-BABC-337ACB3E2C47}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj b/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj deleted file mode 100755 index c56182acc7..0000000000 --- a/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - Exe - net5.0 - - - - - - - diff --git a/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln b/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln deleted file mode 100755 index ad6f0ac393..0000000000 --- a/mysql-client-tests/dotnet/MySqlConnector/MySqlConnectorTest.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MySqlConnectorTest", "MySqlConnectorTest.csproj", "{BF429C29-2191-455B-97E6-271B76B2D1A1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BF429C29-2191-455B-97E6-271B76B2D1A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF429C29-2191-455B-97E6-271B76B2D1A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF429C29-2191-455B-97E6-271B76B2D1A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF429C29-2191-455B-97E6-271B76B2D1A1}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/mysql-client-tests/dotnet/MySqlConnector/Program.cs b/mysql-client-tests/dotnet/MySqlConnector/Program.cs deleted file mode 100755 index a0cc89b6df..0000000000 --- a/mysql-client-tests/dotnet/MySqlConnector/Program.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using MySqlConnector; - -namespace MySqlConnectorTest -{ - class TestException : Exception - { - public TestException(string message) - { - Console.WriteLine(message); - } - } - - class Program - { - static int Main(string[] args) - { - if (args.Length != 3) - { - Console.WriteLine("Must supply $USER $PORT $REPO arguments."); - return 1; - } - - var user = args[0]; - var port = args[1]; - var db = args[2]; - - using (var conn = new MySqlConnection($"Server=127.0.0.1;User ID={user};port={port};Database={db}")) - { - try - { - conn.Open(); - SetupTest(conn); - for (int i = 0; i < 10; i++) - { - QueryTest(conn); - } - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - return 1; - } - - conn.Close(); - } - - return 0; - } - - public static void SetupTest(MySqlConnection conn) - { - using var cmd = new MySqlCommand(); - cmd.Connection = conn; - - cmd.CommandText = @"CREATE TABLE test (pk int, `value` int, primary key(pk))"; - cmd.ExecuteNonQuery(); - - cmd.CommandText = "INSERT INTO test(pk, `value`) VALUES(0,0)"; - cmd.ExecuteNonQuery(); - } - - public static void QueryTest(MySqlConnection conn) - { - string sql = "SELECT count(*) as count FROM test"; - using (var cmd = new MySqlCommand(sql, conn)) - try - { - object result = cmd.ExecuteScalar(); - if (result != null) - { - int r = Convert.ToInt32(result); - if (r != 1) - { - TestException ex = new TestException($"Expected 1, Recieved {r}"); - throw ex; - } - } - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - } - } - } -} diff --git a/mysql-client-tests/go/go-sql-driver-mysql-test.go b/mysql-client-tests/go/go-sql-driver-mysql-test.go deleted file mode 100644 index d0aa1bedff..0000000000 --- a/mysql-client-tests/go/go-sql-driver-mysql-test.go +++ /dev/null @@ -1,117 +0,0 @@ -package main - -import ( - "os" - "fmt" - "database/sql" - - _ "github.com/go-sql-driver/mysql" -) - -var queries [5]string = [5]string{ - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test"} - -type ResFunc func(rows *sql.Rows) error - -type StmtTest struct { - Query string - Args []interface{} - Res []ResFunc -} - -var stmtTests []StmtTest = []StmtTest { - { - "select * from test where pk = ?", - []interface{}{int64(0)}, - []ResFunc{ - func (rows *sql.Rows) error { - var pk, value int64 - if err := rows.Scan(&pk, &value); err != nil { - return err - } - if pk != 0 || value != 0 { - return fmt.Errorf("Unexpected values for pk or value: %d, %d", pk, value) - } - return nil - }, - }, - }, -} - -func main() { - var user = os.Args[1] - var port = os.Args[2] - var db = os.Args[3] - - var dsn = user + "@tcp(127.0.0.1:" + port + ")/" + db - fmt.Println(dsn) - - database, err := sql.Open("mysql", dsn) - - if err != nil { - panic(err) - } - - defer database.Close() - - // Ping opens a connection - err = database.Ping() - if err != nil { - panic(err) - } - - for _, query := range queries { - rows, err := database.Query(query) - if err != nil { - fmt.Println("QUERY: " + query) - panic(err) - } - - // Ignoring result as only way to get results is rows.Next() - // Requires custom typoing of the results. - - rows.Close() - } - - for _, test := range stmtTests { - func() { - stmt, err := database.Prepare(test.Query) - if err != nil { - panic(fmt.Sprintf("err on prepare: %s: %v", test.Query, err)) - } - defer func() { - if err := stmt.Close(); err != nil { - panic(fmt.Sprintf("err on stmt.Close(): %s: %v", test.Query, err)) - } - }() - rows, err := stmt.Query(test.Args...) - if err != nil { - panic(fmt.Sprintf("err on query: %s: %v", test.Query, err)) - } - defer func() { - if err := rows.Close(); err != nil { - panic(fmt.Sprintf("err on rows.Close(): %s: %v", test.Query, err)) - } - }() - i := 0 - for rows.Next() { - if i >= len(test.Res) { - panic(fmt.Sprintf("statement returned more results than expected: %s: %v", test.Query, err)) - } - if err := test.Res[i](rows); err != nil { - panic(fmt.Sprintf("test.Res returned error: %d: %s: %v", i, test.Query, err)) - } - i += 1 - } - if err := rows.Err(); err != nil { - panic(fmt.Sprintf("err on rows.Err(): %s: %v", test.Query, err)) - } - }() - } - - os.Exit(0) -} diff --git a/mysql-client-tests/java/MySQLConnectorTest.java b/mysql-client-tests/java/MySQLConnectorTest.java deleted file mode 100644 index 3c659dd130..0000000000 --- a/mysql-client-tests/java/MySQLConnectorTest.java +++ /dev/null @@ -1,74 +0,0 @@ -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.ResultSet; - -public class MySQLConnectorTest { - public static void main(String[] args) { - Connection conn = null; - - String user = args[0]; - String port = args[1]; - String db = args[2]; - - try { - String url = "jdbc:mysql://127.0.0.1:" + port + "/" + db; - - String password = ""; - - conn = DriverManager.getConnection(url, user, password); - - Statement st = conn.createStatement(); - - String[] queries = { - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test" - }; - - // Only test the first row, column pair for now - String[] results = { - "0", - "pk", - null, - "1", - "0" - }; - - for (int i = 0; i < queries.length; i++) { - String query = queries[i]; - String expected = results[i]; - if ( st.execute(query) ) { - ResultSet rs = st.getResultSet(); - if (rs.next()) { - String result = rs.getString(1); - if ( !expected.equals(result) ) { - System.out.println("Query: \n" + query); - System.out.println("Expected:\n" + expected); - System.out.println("Result:\n" + result); - System.exit(1); - } - } - } else { - String result = Integer.toString(st.getUpdateCount()); - if ( !expected.equals(result) ) { - System.out.println("Query: \n" + query); - System.out.println("Expected:\n" + expected); - System.out.println("Rows Updated:\n" + result); - System.exit(1); - } - } - } - - System.exit(0); - - } catch (SQLException ex) { - System.out.println("An error occurred."); - ex.printStackTrace(); - System.exit(1); - } - } -} diff --git a/mysql-client-tests/mysql-client-tests.bats b/mysql-client-tests/mysql-client-tests.bats deleted file mode 100644 index 09396acf80..0000000000 --- a/mysql-client-tests/mysql-client-tests.bats +++ /dev/null @@ -1,97 +0,0 @@ -# MySQL client tests are set up to test Dolt as a MySQL server and -# standard MySQL Clients in a wide array of languages. I used BATS because -# it was easy to set up the Dolt piece using the command line. -# -# We create a Dolt database and start a server in the setup(). Then, each test -# will attempt to access the server through a client. We'll do some basic -# reads and writes to make sure the client works. As we discover any -# gotchas, we can add tests for that specific language. - -setup() { - REPO_NAME="dolt_repo_$$" - mkdir $REPO_NAME - cd $REPO_NAME - - dolt init - let PORT="$$ % (65536-1024) + 1024" - USER="dolt" - dolt sql-server --host 0.0.0.0 --port=$PORT --user=$USER --loglevel=trace & - SERVER_PID=$! - # Give the server a chance to start - sleep 1 -} - -teardown() { - cd .. - kill $SERVER_PID - rm -rf $REPO_NAME -} - -@test "go go-sql-drive/mysql test" { - go run $BATS_TEST_DIRNAME/go/go-sql-driver-mysql-test.go $USER $PORT $REPO_NAME -} - -@test "python mysql.connector client" { - python3 $BATS_TEST_DIRNAME/python/mysql.connector-test.py $USER $PORT $REPO_NAME -} - -@test "python pymysql client" { - python3 $BATS_TEST_DIRNAME/python/pymysql-test.py $USER $PORT $REPO_NAME -} - -@test "python sqlachemy client" { - python3 $BATS_TEST_DIRNAME/python/sqlalchemy-test.py $USER $PORT $REPO_NAME -} - -@test "mysql-connector-java client" { - javac $BATS_TEST_DIRNAME/java/MySQLConnectorTest.java - java -cp $BATS_TEST_DIRNAME/java:$BATS_TEST_DIRNAME/java/mysql-connector-java-8.0.21.jar MySQLConnectorTest $USER $PORT $REPO_NAME -} - -@test "node mysql client" { - node $BATS_TEST_DIRNAME/node/index.js $USER $PORT $REPO_NAME -} - -@test "c mysql connector" { - (cd $BATS_TEST_DIRNAME/c; make clean; make) - $BATS_TEST_DIRNAME/c/mysql-connector-c-test $USER $PORT $REPO_NAME -} - -@test "cpp mysql connector" { - if [ -d $BATS_TEST_DIRNAME/cpp/_build ] - then - rm -rf $BATS_TEST_DIRNAME/cpp/_build/* - else - mkdir $BATS_TEST_DIRNAME/cpp/_build - fi - cd $BATS_TEST_DIRNAME/cpp/_build - if [[ `uname` = "Darwin" ]]; then - PATH=/usr/local/Cellar/mysql-client/8.0.21/bin/:"$PATH" cmake .. -DWITH_SSL=/usr/local/Cellar/openssl@1.1/1.1.1g/ -DWITH_JDBC=yes; - else - cmake .. - fi -cmake .. - make -j 10 - $BATS_TEST_DIRNAME/cpp/_build/test_mysql_connector_cxx $USER $PORT $REPO_NAME - cd - -} - -@test "dotnet mysql connector" { - cd $BATS_TEST_DIRNAME/dotnet/MySqlConnector - # dotnet run uses output channel 3 which conflicts with bats so we pipe it to null - dotnet run -- $USER $PORT $REPO_NAME 3>&- -} - -@test "dotnet mysql client" { - cd $BATS_TEST_DIRNAME/dotnet/MySqlClient - # dotnet run uses output channel 3 which conflicts with bats so we pipe it to null - dotnet run -- $USER $PORT $REPO_NAME 3>&- -} - -@test "perl DBD:mysql client" { - perl $BATS_TEST_DIRNAME/perl/dbd-mysql-test.pl $USER $PORT $REPO_NAME -} - -@test "ruby ruby/mysql test" { - ruby $BATS_TEST_DIRNAME/ruby/ruby-mysql-test.rb $USER $PORT $REPO_NAME -} diff --git a/mysql-client-tests/node/index.js b/mysql-client-tests/node/index.js deleted file mode 100644 index 164807ea94..0000000000 --- a/mysql-client-tests/node/index.js +++ /dev/null @@ -1,109 +0,0 @@ -const mysql = require('mysql'); - -const args = process.argv.slice(2); - -const user = args[0]; -const port = args[1]; -const db = args[2]; - -const config = { - host: '127.0.0.1', - user: user, - port: port, - database: db -}; - -class Database { - constructor( config ) { - this.connection = mysql.createConnection( config ); - this.connection.connect(); - } - - query( sql, args ) { - return new Promise( ( resolve, reject ) => { - this.connection.query( sql, args, ( err, rows ) => { - if ( err ) - return reject( err ); - return resolve( rows ); - } ); - } ); - } - close() { - this.connection.end(err => { - if (err) { - console.error(err) - } else { - console.log("db connection closed") - } - }) - } -} - -async function main() { - const queries = [ - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test" - ]; - - const results = [ - [], - [ { Field: 'pk', - Type: 'int', - Null: 'NO', - Key: 'PRI', - Default: '', - Extra: '' }, - { Field: 'value', - Type: 'int', - Null: 'YES', - Key: '', - Default: '', - Extra: '' } - ], - [], - { - fieldCount: 0, - affectedRows: 1, - insertId: 0, - serverStatus: 0, - warningCount: 0, - message: '', - protocol41: true, - changedRows: 0 - }, - [ { pk: 0, value: 0 } ] - ]; - - const database = new Database(config); - - await Promise.all(queries.map((query, idx) => { - const expected = results[idx]; - return database.query(query).then(rows => { - const resultStr = JSON.stringify(rows); - const result = JSON.parse(resultStr); - if (resultStr !== JSON.stringify(expected) ) { - console.log("Query:", query); - console.log("Results:", result); - console.log("Expected:", expected); - throw new Error("Query failed") - } else { - console.log("Query succeeded:", query) - } - }).catch(err => { - console.error(err) - process.exit(1); - }); - })); - - database.close() - process.exit(0) -} - -main(); - - - - diff --git a/mysql-client-tests/node/package-lock.json b/mysql-client-tests/node/package-lock.json deleted file mode 100644 index 283460d30a..0000000000 --- a/mysql-client-tests/node/package-lock.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "node", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "mysql": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", - "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", - "requires": { - "bignumber.js": "9.0.0", - "readable-stream": "2.3.7", - "safe-buffer": "5.1.2", - "sqlstring": "2.3.1" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "sqlstring": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - } - } -} diff --git a/mysql-client-tests/node/package.json b/mysql-client-tests/node/package.json deleted file mode 100644 index dec3bc09e8..0000000000 --- a/mysql-client-tests/node/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "node", - "version": "1.0.0", - "description": "A simple node command line utility to show how to connect a node application to a Dolt database using the MySQL connector.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "mysql": "^2.18.1" - } -} diff --git a/mysql-client-tests/perl/dbd-mysql-test.pl b/mysql-client-tests/perl/dbd-mysql-test.pl deleted file mode 100644 index f4e6aba589..0000000000 --- a/mysql-client-tests/perl/dbd-mysql-test.pl +++ /dev/null @@ -1,33 +0,0 @@ -use strict; - -use DBI; - -my $QUERY_RESPONSE = [ - { "create table test (pk int, `value` int, primary key(pk))" => '0E0' }, - { "describe test" => 2 }, - { "insert into test (pk, `value`) values (0,0)" => 1 }, - { "select * from test" => 1 } - ]; - -my $user = $ARGV[0]; -my $port = $ARGV[1]; -my $db = $ARGV[2]; - -my $dsn = "DBI:mysql:database=$db;host=127.0.0.1;port=$port"; -my $dbh = DBI->connect($dsn, $user, ""); - -foreach my $query_response ( @{$QUERY_RESPONSE} ) { - my @query_keys = keys %{$query_response}; - my $query = $query_keys[0]; - my $exp_result = $query_response->{$query}; - - my $result = $dbh->do($query); - if ( $result != $exp_result ) { - print "QUERY: $query\n"; - print "EXPECTED: $exp_result\n"; - print "RESULT: $result\n"; - exit 1 - } -} - -exit 0; diff --git a/mysql-client-tests/python/mysql.connector-test.py b/mysql-client-tests/python/mysql.connector-test.py deleted file mode 100644 index 0517d95e4b..0000000000 --- a/mysql-client-tests/python/mysql.connector-test.py +++ /dev/null @@ -1,51 +0,0 @@ -import mysql.connector -import sys - -QUERY_RESPONSE = [ - { "create table test (pk int, `value` int, primary key(pk))": [] }, - { "describe test": [ - ('pk', 'int', 'NO', 'PRI', '', ''), - ('value', 'int', 'YES', '', '', '') - ] }, - { "insert into test (pk, `value`) values (0,0)": [] }, - { "select * from test": [(0,0)] } -] - -def main(): - user = sys.argv[1] - port = sys.argv[2] - db = sys.argv[3] - - connection = mysql.connector.connect(user=user, - host="127.0.0.1", - port=port, - database=db) - - for query_response in QUERY_RESPONSE: - query = list(query_response.keys())[0] - exp_results = query_response[query] - cursor = connection.cursor() - cursor.execute(query) - try: - results = cursor.fetchall() - print(exp_results) - print(results) - if ( results != exp_results ): - print("Query:") - print(query) - print("Expected:") - print(exp_results) - print("Received:") - print(results) - exit(1) - except mysql.connector.errors.InterfaceError: - # This is a write query - pass - - cursor.close() - - connection.close() - - exit(0) - -main() diff --git a/mysql-client-tests/python/pymysql-test.py b/mysql-client-tests/python/pymysql-test.py deleted file mode 100644 index 9334566d2f..0000000000 --- a/mysql-client-tests/python/pymysql-test.py +++ /dev/null @@ -1,43 +0,0 @@ -import pymysql -import sys - -QUERY_RESPONSE = [ - { "create table test (pk int, `value` int, primary key(pk))": () }, - { "describe test": ( - ('pk', 'int', 'NO', 'PRI', '', ''), - ('value', 'int', 'YES', '', '', '') - ) }, - { "insert into test (pk, `value`) values (0,0)": () }, - { "select * from test": ((0,0),) } -] - -def main(): - user = sys.argv[1] - port = int(sys.argv[2]) - db = sys.argv[3] - - connection = pymysql.connect(host="127.0.0.1", - port=port, - user=user, - db=db) - - for query_response in QUERY_RESPONSE: - query = list(query_response.keys())[0] - exp_results = query_response[query] - with connection.cursor() as cursor: - cursor.execute(query) - results = cursor.fetchall() - if ( results != exp_results ): - print("Query:") - print(query) - print("Expected:") - print(exp_results) - print("Received:") - print(results) - exit(1) - - connection.close() - - exit(0) - -main() diff --git a/mysql-client-tests/python/sqlalchemy-test.py b/mysql-client-tests/python/sqlalchemy-test.py deleted file mode 100644 index 6fcee84347..0000000000 --- a/mysql-client-tests/python/sqlalchemy-test.py +++ /dev/null @@ -1,56 +0,0 @@ -import sqlalchemy - -from sqlalchemy.engine import Engine -from sqlalchemy import create_engine - -import sys - -QUERY_RESPONSE = [ - { "create table test (pk int, `value` int, primary key(pk))": [] }, - { "describe test": [ - ('pk', 'int', 'NO', 'PRI', '', ''), - ('value', 'int', 'YES', '', '', '') - ] }, - { "insert into test (pk, `value`) values (0,0)": () }, - { "select * from test": [(0,0)] } -] - -def main(): - user = sys.argv[1] - port = int(sys.argv[2]) - db = sys.argv[3] - - conn_string_base = "mysql+mysqlconnector://" - - engine = create_engine(conn_string_base + - "{user}@127.0.0.1:{port}/{db}".format(user=user, - port=port, - db=db) - ) - - with engine.connect() as con: - for query_response in QUERY_RESPONSE: - query = list(query_response.keys())[0] - exp_results = query_response[query] - - result_proxy = con.execute(query) - - try: - results = result_proxy.fetchall() - if ( results != exp_results ): - print("Query:") - print(query) - print("Expected:") - print(exp_results) - print("Received:") - print(results) - exit(1) - # You can't call fetchall on an insert - # so we'll just ignore the exception - except sqlalchemy.exc.ResourceClosedError: - pass - - con.close() - exit(0) - -main() diff --git a/mysql-client-tests/ruby/Gemfile b/mysql-client-tests/ruby/Gemfile deleted file mode 100644 index dc16b4631f..0000000000 --- a/mysql-client-tests/ruby/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source 'https://rubygems.org' -gem 'ruby-mysql', '~> 2.9', '>= 2.9.14' diff --git a/mysql-client-tests/ruby/Gemfile.lock b/mysql-client-tests/ruby/Gemfile.lock deleted file mode 100644 index 3ba0884177..0000000000 --- a/mysql-client-tests/ruby/Gemfile.lock +++ /dev/null @@ -1,13 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - ruby-mysql (2.9.14) - -PLATFORMS - ruby - -DEPENDENCIES - ruby-mysql (~> 2.9, >= 2.9.14) - -BUNDLED WITH - 2.1.4 diff --git a/mysql-client-tests/ruby/ruby-mysql-test.rb b/mysql-client-tests/ruby/ruby-mysql-test.rb deleted file mode 100644 index e990a6e5d0..0000000000 --- a/mysql-client-tests/ruby/ruby-mysql-test.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/ruby - -require 'mysql' - -user = ARGV[0] -port = ARGV[1] -db = ARGV[2] - -queries = [ - "create table test (pk int, `value` int, primary key(pk))", - "describe test", - "select * from test", - "insert into test (pk, `value`) values (0,0)", - "select * from test" -] - -conn = Mysql::new("127.0.0.1", user, "", db, port) -queries.each do |query| - res = conn.query(query) -end -conn.close() - -exit(0) From 61b06450b1c067c81ee57354ed24b3f854788a51 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 15 Mar 2021 14:03:22 -0700 Subject: [PATCH 3/3] /integration-tests: move bats --- .dockerignore | 2 +- .github/workflows/ci-bats-tests.yaml | 4 ++-- {bats => integration-tests/bats}/.gitignore | 0 {bats => integration-tests/bats}/1pk5col-ints.bats | 0 .../bats}/1pk5col-strings.bats | 0 .../bats}/1pksupportedtypes.bats | 0 {bats => integration-tests/bats}/2pk5cols-ints.bats | 0 {bats => integration-tests/bats}/README.md | 0 {bats => integration-tests/bats}/arg-parsing.bats | 0 .../bats}/auto_increment.bats | 0 {bats => integration-tests/bats}/aws-remotes.bats | 0 {bats => integration-tests/bats}/back-compat.bats | 0 {bats => integration-tests/bats}/blame.bats | 0 .../bats}/case-sensitivity.bats | 0 {bats => integration-tests/bats}/column_tags.bats | 0 {bats => integration-tests/bats}/commit_tags.bats | 0 {bats => integration-tests/bats}/common.bash.bats | 0 .../bats}/compatibility/README.md | 0 .../bats}/compatibility/corona-virus-test.sh | 0 .../migration_test_files/helper/common.bash | 0 .../migration_test_files/helper/windows-compat.bash | 0 .../migration_test_files/migrate-push-pull.sh | 0 .../compatibility/migration_test_files/migrate.bats | 0 .../migration_test_files/setup_repo.sh | 0 .../bats}/compatibility/runner.sh | 0 .../test_files/bats/compatibility.bats | 0 .../test_files/bats/helper/common.bash | 0 .../test_files/bats/helper/windows-compat.bash | 0 .../compatibility/test_files/dolt_versions.txt | 0 .../bats}/compatibility/test_files/setup_repo.sh | 0 {bats => integration-tests/bats}/config.bats | 0 .../bats}/conflict-detection.bats | 0 {bats => integration-tests/bats}/cp-and-mv.bats | 0 {bats => integration-tests/bats}/create-views.bats | 0 {bats => integration-tests/bats}/creds.bats | 0 .../bats}/default-values.bats | 0 {bats => integration-tests/bats}/diff.bats | 0 {bats => integration-tests/bats}/docs.bats | 0 {bats => integration-tests/bats}/empty-repo.bats | 0 {bats => integration-tests/bats}/export-tables.bats | 0 .../bats}/feature-version.bats | 0 {bats => integration-tests/bats}/filter-branch.bats | 0 {bats => integration-tests/bats}/foreign-keys.bats | 0 .../bats}/garbage_collection.bats | 0 {bats => integration-tests/bats}/git-dolt.bats | 0 .../bats}/helper/1pk5col-ints.csv | 0 .../bats}/helper/1pk5col-ints.json | 0 .../bats}/helper/1pk5col-ints.psv | 0 .../bats}/helper/1pk5col-ints.sql | 0 .../bats}/helper/1pk5col-strings-newlines.csv | 0 .../bats}/helper/1pk5col-strings.csv | 0 .../bats}/helper/1pksupportedtypes.csv | 0 .../bats}/helper/2pk5col-ints.csv | 0 .../bats}/helper/bad-characters.csv | 0 {bats => integration-tests/bats}/helper/bad.csv | 0 {bats => integration-tests/bats}/helper/bad.data | 0 {bats => integration-tests/bats}/helper/bad.xlsx | 0 .../bats}/helper/caps-column-names.csv | 0 {bats => integration-tests/bats}/helper/common.bash | 0 .../bats}/helper/employees-sch-bad.sql | 0 .../bats}/helper/employees-sch.sql | 0 .../bats}/helper/employees-tbl-bad.json | 0 .../bats}/helper/employees-tbl-new.json | 0 .../bats}/helper/employees-tbl-schema-unordered.csv | 0 .../helper/employees-tbl-schema-unordered.json | 0 .../bats}/helper/employees-tbl-schema-wrong.csv | 0 .../bats}/helper/employees-tbl-schema-wrong.json | 0 .../bats}/helper/employees-tbl.json | 0 .../bats}/helper/employees.xlsx | Bin .../bats}/helper/empty-strings-null-values.json | 0 .../bats}/helper/index_onepk.csv | 0 .../bats}/helper/index_onepk_non_unique.csv | 0 .../bats}/helper/known-decapitated.jwk | 0 .../bats}/helper/known-good.jwk | 0 .../bats}/helper/known-truncated.jwk | 0 .../bats}/helper/old_dolt_schemas/config.json | 0 .../noms/4bujnjuatdli0klda7ucot0tl836jujt | Bin .../noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 | Bin .../bats}/helper/old_dolt_schemas/noms/LOCK | 0 .../noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht | Bin .../noms/chghnlvugtiui6khfo29cpfnfr3166qc | Bin .../noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 | Bin .../noms/erturgf7to0f6r8prlbllflbshg5li4n | Bin .../bats}/helper/old_dolt_schemas/noms/manifest | 0 .../noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 | Bin .../noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n | Bin .../noms/qe0mct6rf8puhdnqecm185p63dacaqrt | Bin .../noms/ro000svvgga0k7hatg7fta9j8ismtc3b | Bin .../noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt | Bin .../bats}/helper/old_dolt_schemas/repo_state.json | 0 {bats => integration-tests/bats}/helper/pytest.py | 0 .../bats}/helper/queries/1pksupportedtypes/add.sql | 0 .../queries/1pksupportedtypes/create_table.sql | 0 .../helper/queries/1pksupportedtypes/delete.sql | 0 .../helper/queries/1pksupportedtypes/update.sql | 0 .../bats}/helper/queries/2pk5col-ints/add.sql | 0 .../helper/queries/2pk5col-ints/all_pk_update.sql | 0 .../helper/queries/2pk5col-ints/create_table.sql | 0 .../bats}/helper/queries/2pk5col-ints/delete.sql | 0 .../queries/2pk5col-ints/single_pk_update.sql | 0 .../bats}/helper/queries/2pk5col-ints/update.sql | 0 .../bats}/helper/query-server-common.bash | 0 .../bats}/helper/sql-reserved-column-name.csv | 0 .../helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts | 0 .../helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts | 0 .../helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts | 0 .../helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts | 0 .../helper/testdata/20200113/.dolt/config.json | 0 .../.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a | Bin .../.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 | Bin .../.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 | Bin .../.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db | Bin .../.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss | Bin .../.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt | Bin .../.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 | Bin .../.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t | Bin .../.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 | Bin .../.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu | Bin .../.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 | Bin .../.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 | Bin .../.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd | Bin .../.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 | Bin .../bats}/helper/testdata/20200113/.dolt/noms/LOCK | 0 .../.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn | Bin .../.dolt/noms/a9307merr53dd71vj459m7qo6rk435na | Bin .../.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 | Bin .../.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat | Bin .../.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 | Bin .../.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j | Bin .../.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb | Bin .../.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 | Bin .../.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha | Bin .../.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc | Bin .../.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 | Bin .../.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 | Bin .../.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m | Bin .../.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 | Bin .../.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l | Bin .../.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h | Bin .../.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv | Bin .../.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr | Bin .../.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl | Bin .../.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p | Bin .../.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e | Bin .../.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 | Bin .../.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod | Bin .../helper/testdata/20200113/.dolt/noms/manifest | 0 .../.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn | Bin .../.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 | Bin .../.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv | Bin .../.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh | Bin .../.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d | Bin .../.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln | Bin .../.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq | Bin .../.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik | Bin .../.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm | Bin .../.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 | Bin .../.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 | Bin .../.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 | Bin .../.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 | Bin .../.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa | Bin .../.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou | Bin .../.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 | Bin .../helper/testdata/20200113/.dolt/repo_state.json | 0 .../bats}/helper/testdata/20200113/README.md | 0 .../helper/testdata/20200225/.dolt/config.json | 0 .../.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d | Bin .../.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 | Bin .../.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt | Bin .../.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe | Bin .../.dolt/noms/3oobbccq8prr93u72rui774p5bddobss | Bin .../.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 | Bin .../.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii | Bin .../.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt | Bin .../.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 | Bin .../.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv | Bin .../.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln | Bin .../.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr | Bin .../.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s | Bin .../.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq | Bin .../.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq | Bin .../.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 | Bin .../bats}/helper/testdata/20200225/.dolt/noms/LOCK | 0 .../.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 | Bin .../.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur | Bin .../.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a | Bin .../.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem | Bin .../.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq | Bin .../.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd | Bin .../.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh | Bin .../.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke | Bin .../.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af | Bin .../.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad | Bin .../.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 | Bin .../.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 | Bin .../.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb | Bin .../.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e | Bin .../helper/testdata/20200225/.dolt/noms/manifest | 0 .../.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 | Bin .../.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 | Bin .../.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 | Bin .../.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif | Bin .../.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran | Bin .../.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko | Bin .../.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 | Bin .../.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r | Bin .../.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u | Bin .../.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo | Bin .../helper/testdata/20200225/.dolt/repo_state.json | 0 .../bats}/helper/testdata/20200225/LICENSE.md | 0 .../bats}/helper/testdata/20200225/README.md | 0 .../bats}/helper/testdata/README.md | 0 .../bats}/helper/testdata/new_repo.sh | 0 .../bats}/helper/windows-compat.bash | 0 .../bats}/import-create-tables.bats | 0 .../bats}/import-replace-tables.bats | 0 .../bats}/import-update-tables.bats | 0 .../bats}/index-on-writes.bats | 0 {bats => integration-tests/bats}/index.bats | 0 {bats => integration-tests/bats}/keyless.bats | 0 .../bats}/localbs-remotes.bats | 0 {bats => integration-tests/bats}/log.bats | 0 {bats => integration-tests/bats}/merge.bats | 0 .../bats}/multiple-tables.bats | 0 {bats => integration-tests/bats}/no-repo.bats | 0 {bats => integration-tests/bats}/query-catalog.bats | 0 .../bats}/regression-tests.bats | 0 .../bats}/remotes-file-system.bats | 0 {bats => integration-tests/bats}/remotes.bats | 0 {bats => integration-tests/bats}/rename-tables.bats | 0 .../bats}/schema-changes.bats | 0 {bats => integration-tests/bats}/schema-export.bats | 0 {bats => integration-tests/bats}/schema-import.bats | 0 {bats => integration-tests/bats}/send-metrics.bats | 0 .../bats}/server_multiclient_test.py | 0 {bats => integration-tests/bats}/sql-add.bats | 0 {bats => integration-tests/bats}/sql-batch.bats | 0 {bats => integration-tests/bats}/sql-checkout.bats | 0 {bats => integration-tests/bats}/sql-commit.bats | 0 {bats => integration-tests/bats}/sql-conflicts.bats | 0 .../bats}/sql-create-database.bats | 0 .../bats}/sql-create-tables.bats | 0 .../bats}/sql-delimiter.expect | 0 {bats => integration-tests/bats}/sql-diff.bats | 0 {bats => integration-tests/bats}/sql-load-data.bats | 0 {bats => integration-tests/bats}/sql-merge.bats | 0 {bats => integration-tests/bats}/sql-multi-db.bats | 0 .../bats}/sql-reserved-column-name.bats | 0 {bats => integration-tests/bats}/sql-reset.bats | 0 {bats => integration-tests/bats}/sql-server.bats | 0 {bats => integration-tests/bats}/sql-shell.bats | 0 {bats => integration-tests/bats}/sql-shell.expect | 0 {bats => integration-tests/bats}/sql-status.bats | 0 .../bats}/sql-works-after-failing-query.expect | 0 {bats => integration-tests/bats}/sql.bats | 0 {bats => integration-tests/bats}/status.bats | 0 {bats => integration-tests/bats}/system-tables.bats | 0 {bats => integration-tests/bats}/triggers.bats | 0 {bats => integration-tests/bats}/types.bats | 0 .../bats}/verify-constraints.bats | 0 260 files changed, 3 insertions(+), 3 deletions(-) rename {bats => integration-tests/bats}/.gitignore (100%) rename {bats => integration-tests/bats}/1pk5col-ints.bats (100%) rename {bats => integration-tests/bats}/1pk5col-strings.bats (100%) rename {bats => integration-tests/bats}/1pksupportedtypes.bats (100%) rename {bats => integration-tests/bats}/2pk5cols-ints.bats (100%) rename {bats => integration-tests/bats}/README.md (100%) rename {bats => integration-tests/bats}/arg-parsing.bats (100%) rename {bats => integration-tests/bats}/auto_increment.bats (100%) rename {bats => integration-tests/bats}/aws-remotes.bats (100%) rename {bats => integration-tests/bats}/back-compat.bats (100%) rename {bats => integration-tests/bats}/blame.bats (100%) rename {bats => integration-tests/bats}/case-sensitivity.bats (100%) rename {bats => integration-tests/bats}/column_tags.bats (100%) rename {bats => integration-tests/bats}/commit_tags.bats (100%) rename {bats => integration-tests/bats}/common.bash.bats (100%) rename {bats => integration-tests/bats}/compatibility/README.md (100%) rename {bats => integration-tests/bats}/compatibility/corona-virus-test.sh (100%) rename {bats => integration-tests/bats}/compatibility/migration_test_files/helper/common.bash (100%) rename {bats => integration-tests/bats}/compatibility/migration_test_files/helper/windows-compat.bash (100%) rename {bats => integration-tests/bats}/compatibility/migration_test_files/migrate-push-pull.sh (100%) rename {bats => integration-tests/bats}/compatibility/migration_test_files/migrate.bats (100%) rename {bats => integration-tests/bats}/compatibility/migration_test_files/setup_repo.sh (100%) rename {bats => integration-tests/bats}/compatibility/runner.sh (100%) rename {bats => integration-tests/bats}/compatibility/test_files/bats/compatibility.bats (100%) rename {bats => integration-tests/bats}/compatibility/test_files/bats/helper/common.bash (100%) rename {bats => integration-tests/bats}/compatibility/test_files/bats/helper/windows-compat.bash (100%) rename {bats => integration-tests/bats}/compatibility/test_files/dolt_versions.txt (100%) rename {bats => integration-tests/bats}/compatibility/test_files/setup_repo.sh (100%) rename {bats => integration-tests/bats}/config.bats (100%) rename {bats => integration-tests/bats}/conflict-detection.bats (100%) rename {bats => integration-tests/bats}/cp-and-mv.bats (100%) rename {bats => integration-tests/bats}/create-views.bats (100%) rename {bats => integration-tests/bats}/creds.bats (100%) rename {bats => integration-tests/bats}/default-values.bats (100%) rename {bats => integration-tests/bats}/diff.bats (100%) rename {bats => integration-tests/bats}/docs.bats (100%) rename {bats => integration-tests/bats}/empty-repo.bats (100%) rename {bats => integration-tests/bats}/export-tables.bats (100%) rename {bats => integration-tests/bats}/feature-version.bats (100%) rename {bats => integration-tests/bats}/filter-branch.bats (100%) rename {bats => integration-tests/bats}/foreign-keys.bats (100%) rename {bats => integration-tests/bats}/garbage_collection.bats (100%) rename {bats => integration-tests/bats}/git-dolt.bats (100%) rename {bats => integration-tests/bats}/helper/1pk5col-ints.csv (100%) rename {bats => integration-tests/bats}/helper/1pk5col-ints.json (100%) rename {bats => integration-tests/bats}/helper/1pk5col-ints.psv (100%) rename {bats => integration-tests/bats}/helper/1pk5col-ints.sql (100%) rename {bats => integration-tests/bats}/helper/1pk5col-strings-newlines.csv (100%) rename {bats => integration-tests/bats}/helper/1pk5col-strings.csv (100%) rename {bats => integration-tests/bats}/helper/1pksupportedtypes.csv (100%) rename {bats => integration-tests/bats}/helper/2pk5col-ints.csv (100%) rename {bats => integration-tests/bats}/helper/bad-characters.csv (100%) rename {bats => integration-tests/bats}/helper/bad.csv (100%) rename {bats => integration-tests/bats}/helper/bad.data (100%) rename {bats => integration-tests/bats}/helper/bad.xlsx (100%) rename {bats => integration-tests/bats}/helper/caps-column-names.csv (100%) rename {bats => integration-tests/bats}/helper/common.bash (100%) rename {bats => integration-tests/bats}/helper/employees-sch-bad.sql (100%) rename {bats => integration-tests/bats}/helper/employees-sch.sql (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-bad.json (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-new.json (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-schema-unordered.csv (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-schema-unordered.json (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-schema-wrong.csv (100%) rename {bats => integration-tests/bats}/helper/employees-tbl-schema-wrong.json (100%) rename {bats => integration-tests/bats}/helper/employees-tbl.json (100%) rename {bats => integration-tests/bats}/helper/employees.xlsx (100%) rename {bats => integration-tests/bats}/helper/empty-strings-null-values.json (100%) rename {bats => integration-tests/bats}/helper/index_onepk.csv (100%) rename {bats => integration-tests/bats}/helper/index_onepk_non_unique.csv (100%) rename {bats => integration-tests/bats}/helper/known-decapitated.jwk (100%) rename {bats => integration-tests/bats}/helper/known-good.jwk (100%) rename {bats => integration-tests/bats}/helper/known-truncated.jwk (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/config.json (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/4bujnjuatdli0klda7ucot0tl836jujt (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/LOCK (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/chghnlvugtiui6khfo29cpfnfr3166qc (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/erturgf7to0f6r8prlbllflbshg5li4n (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/manifest (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/qe0mct6rf8puhdnqecm185p63dacaqrt (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/ro000svvgga0k7hatg7fta9j8ismtc3b (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt (100%) rename {bats => integration-tests/bats}/helper/old_dolt_schemas/repo_state.json (100%) rename {bats => integration-tests/bats}/helper/pytest.py (100%) rename {bats => integration-tests/bats}/helper/queries/1pksupportedtypes/add.sql (100%) rename {bats => integration-tests/bats}/helper/queries/1pksupportedtypes/create_table.sql (100%) rename {bats => integration-tests/bats}/helper/queries/1pksupportedtypes/delete.sql (100%) rename {bats => integration-tests/bats}/helper/queries/1pksupportedtypes/update.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/add.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/all_pk_update.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/create_table.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/delete.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/single_pk_update.sql (100%) rename {bats => integration-tests/bats}/helper/queries/2pk5col-ints/update.sql (100%) rename {bats => integration-tests/bats}/helper/query-server-common.bash (100%) rename {bats => integration-tests/bats}/helper/sql-reserved-column-name.csv (100%) rename {bats => integration-tests/bats}/helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts (100%) rename {bats => integration-tests/bats}/helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts (100%) rename {bats => integration-tests/bats}/helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts (100%) rename {bats => integration-tests/bats}/helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/config.json (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/LOCK (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/a9307merr53dd71vj459m7qo6rk435na (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/manifest (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/.dolt/repo_state.json (100%) rename {bats => integration-tests/bats}/helper/testdata/20200113/README.md (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/config.json (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/3oobbccq8prr93u72rui774p5bddobss (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/LOCK (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/manifest (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/.dolt/repo_state.json (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/LICENSE.md (100%) rename {bats => integration-tests/bats}/helper/testdata/20200225/README.md (100%) rename {bats => integration-tests/bats}/helper/testdata/README.md (100%) rename {bats => integration-tests/bats}/helper/testdata/new_repo.sh (100%) rename {bats => integration-tests/bats}/helper/windows-compat.bash (100%) rename {bats => integration-tests/bats}/import-create-tables.bats (100%) rename {bats => integration-tests/bats}/import-replace-tables.bats (100%) rename {bats => integration-tests/bats}/import-update-tables.bats (100%) rename {bats => integration-tests/bats}/index-on-writes.bats (100%) rename {bats => integration-tests/bats}/index.bats (100%) rename {bats => integration-tests/bats}/keyless.bats (100%) rename {bats => integration-tests/bats}/localbs-remotes.bats (100%) rename {bats => integration-tests/bats}/log.bats (100%) rename {bats => integration-tests/bats}/merge.bats (100%) rename {bats => integration-tests/bats}/multiple-tables.bats (100%) rename {bats => integration-tests/bats}/no-repo.bats (100%) rename {bats => integration-tests/bats}/query-catalog.bats (100%) rename {bats => integration-tests/bats}/regression-tests.bats (100%) rename {bats => integration-tests/bats}/remotes-file-system.bats (100%) rename {bats => integration-tests/bats}/remotes.bats (100%) rename {bats => integration-tests/bats}/rename-tables.bats (100%) rename {bats => integration-tests/bats}/schema-changes.bats (100%) rename {bats => integration-tests/bats}/schema-export.bats (100%) rename {bats => integration-tests/bats}/schema-import.bats (100%) rename {bats => integration-tests/bats}/send-metrics.bats (100%) rename {bats => integration-tests/bats}/server_multiclient_test.py (100%) rename {bats => integration-tests/bats}/sql-add.bats (100%) rename {bats => integration-tests/bats}/sql-batch.bats (100%) rename {bats => integration-tests/bats}/sql-checkout.bats (100%) rename {bats => integration-tests/bats}/sql-commit.bats (100%) rename {bats => integration-tests/bats}/sql-conflicts.bats (100%) rename {bats => integration-tests/bats}/sql-create-database.bats (100%) rename {bats => integration-tests/bats}/sql-create-tables.bats (100%) rename {bats => integration-tests/bats}/sql-delimiter.expect (100%) rename {bats => integration-tests/bats}/sql-diff.bats (100%) rename {bats => integration-tests/bats}/sql-load-data.bats (100%) rename {bats => integration-tests/bats}/sql-merge.bats (100%) rename {bats => integration-tests/bats}/sql-multi-db.bats (100%) rename {bats => integration-tests/bats}/sql-reserved-column-name.bats (100%) rename {bats => integration-tests/bats}/sql-reset.bats (100%) rename {bats => integration-tests/bats}/sql-server.bats (100%) rename {bats => integration-tests/bats}/sql-shell.bats (100%) rename {bats => integration-tests/bats}/sql-shell.expect (100%) rename {bats => integration-tests/bats}/sql-status.bats (100%) rename {bats => integration-tests/bats}/sql-works-after-failing-query.expect (100%) rename {bats => integration-tests/bats}/sql.bats (100%) rename {bats => integration-tests/bats}/status.bats (100%) rename {bats => integration-tests/bats}/system-tables.bats (100%) rename {bats => integration-tests/bats}/triggers.bats (100%) rename {bats => integration-tests/bats}/types.bats (100%) rename {bats => integration-tests/bats}/verify-constraints.bats (100%) diff --git a/.dockerignore b/.dockerignore index d57b0ddfb9..06c5778caf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,5 @@ Jenkinsfile -bats/ +integration-tests/bats/ proto/ samples/ benchmark/ diff --git a/.github/workflows/ci-bats-tests.yaml b/.github/workflows/ci-bats-tests.yaml index 620f4d7f6a..93ca9cfdd3 100644 --- a/.github/workflows/ci-bats-tests.yaml +++ b/.github/workflows/ci-bats-tests.yaml @@ -98,7 +98,7 @@ jobs: if: matrix.os == 'windows-2019' run: | bats --tap . - working-directory: ./bats + working-directory: ./integration-tests/bats env: IS_WINDOWS: true WINDOWS_BASE_DIR: "/d/a" @@ -106,4 +106,4 @@ jobs: if: matrix.os != 'windows-2019' run: | bats --tap . - working-directory: ./bats + working-directory: ./integration-tests/bats diff --git a/bats/.gitignore b/integration-tests/bats/.gitignore similarity index 100% rename from bats/.gitignore rename to integration-tests/bats/.gitignore diff --git a/bats/1pk5col-ints.bats b/integration-tests/bats/1pk5col-ints.bats similarity index 100% rename from bats/1pk5col-ints.bats rename to integration-tests/bats/1pk5col-ints.bats diff --git a/bats/1pk5col-strings.bats b/integration-tests/bats/1pk5col-strings.bats similarity index 100% rename from bats/1pk5col-strings.bats rename to integration-tests/bats/1pk5col-strings.bats diff --git a/bats/1pksupportedtypes.bats b/integration-tests/bats/1pksupportedtypes.bats similarity index 100% rename from bats/1pksupportedtypes.bats rename to integration-tests/bats/1pksupportedtypes.bats diff --git a/bats/2pk5cols-ints.bats b/integration-tests/bats/2pk5cols-ints.bats similarity index 100% rename from bats/2pk5cols-ints.bats rename to integration-tests/bats/2pk5cols-ints.bats diff --git a/bats/README.md b/integration-tests/bats/README.md similarity index 100% rename from bats/README.md rename to integration-tests/bats/README.md diff --git a/bats/arg-parsing.bats b/integration-tests/bats/arg-parsing.bats similarity index 100% rename from bats/arg-parsing.bats rename to integration-tests/bats/arg-parsing.bats diff --git a/bats/auto_increment.bats b/integration-tests/bats/auto_increment.bats similarity index 100% rename from bats/auto_increment.bats rename to integration-tests/bats/auto_increment.bats diff --git a/bats/aws-remotes.bats b/integration-tests/bats/aws-remotes.bats similarity index 100% rename from bats/aws-remotes.bats rename to integration-tests/bats/aws-remotes.bats diff --git a/bats/back-compat.bats b/integration-tests/bats/back-compat.bats similarity index 100% rename from bats/back-compat.bats rename to integration-tests/bats/back-compat.bats diff --git a/bats/blame.bats b/integration-tests/bats/blame.bats similarity index 100% rename from bats/blame.bats rename to integration-tests/bats/blame.bats diff --git a/bats/case-sensitivity.bats b/integration-tests/bats/case-sensitivity.bats similarity index 100% rename from bats/case-sensitivity.bats rename to integration-tests/bats/case-sensitivity.bats diff --git a/bats/column_tags.bats b/integration-tests/bats/column_tags.bats similarity index 100% rename from bats/column_tags.bats rename to integration-tests/bats/column_tags.bats diff --git a/bats/commit_tags.bats b/integration-tests/bats/commit_tags.bats similarity index 100% rename from bats/commit_tags.bats rename to integration-tests/bats/commit_tags.bats diff --git a/bats/common.bash.bats b/integration-tests/bats/common.bash.bats similarity index 100% rename from bats/common.bash.bats rename to integration-tests/bats/common.bash.bats diff --git a/bats/compatibility/README.md b/integration-tests/bats/compatibility/README.md similarity index 100% rename from bats/compatibility/README.md rename to integration-tests/bats/compatibility/README.md diff --git a/bats/compatibility/corona-virus-test.sh b/integration-tests/bats/compatibility/corona-virus-test.sh similarity index 100% rename from bats/compatibility/corona-virus-test.sh rename to integration-tests/bats/compatibility/corona-virus-test.sh diff --git a/bats/compatibility/migration_test_files/helper/common.bash b/integration-tests/bats/compatibility/migration_test_files/helper/common.bash similarity index 100% rename from bats/compatibility/migration_test_files/helper/common.bash rename to integration-tests/bats/compatibility/migration_test_files/helper/common.bash diff --git a/bats/compatibility/migration_test_files/helper/windows-compat.bash b/integration-tests/bats/compatibility/migration_test_files/helper/windows-compat.bash similarity index 100% rename from bats/compatibility/migration_test_files/helper/windows-compat.bash rename to integration-tests/bats/compatibility/migration_test_files/helper/windows-compat.bash diff --git a/bats/compatibility/migration_test_files/migrate-push-pull.sh b/integration-tests/bats/compatibility/migration_test_files/migrate-push-pull.sh similarity index 100% rename from bats/compatibility/migration_test_files/migrate-push-pull.sh rename to integration-tests/bats/compatibility/migration_test_files/migrate-push-pull.sh diff --git a/bats/compatibility/migration_test_files/migrate.bats b/integration-tests/bats/compatibility/migration_test_files/migrate.bats similarity index 100% rename from bats/compatibility/migration_test_files/migrate.bats rename to integration-tests/bats/compatibility/migration_test_files/migrate.bats diff --git a/bats/compatibility/migration_test_files/setup_repo.sh b/integration-tests/bats/compatibility/migration_test_files/setup_repo.sh similarity index 100% rename from bats/compatibility/migration_test_files/setup_repo.sh rename to integration-tests/bats/compatibility/migration_test_files/setup_repo.sh diff --git a/bats/compatibility/runner.sh b/integration-tests/bats/compatibility/runner.sh similarity index 100% rename from bats/compatibility/runner.sh rename to integration-tests/bats/compatibility/runner.sh diff --git a/bats/compatibility/test_files/bats/compatibility.bats b/integration-tests/bats/compatibility/test_files/bats/compatibility.bats similarity index 100% rename from bats/compatibility/test_files/bats/compatibility.bats rename to integration-tests/bats/compatibility/test_files/bats/compatibility.bats diff --git a/bats/compatibility/test_files/bats/helper/common.bash b/integration-tests/bats/compatibility/test_files/bats/helper/common.bash similarity index 100% rename from bats/compatibility/test_files/bats/helper/common.bash rename to integration-tests/bats/compatibility/test_files/bats/helper/common.bash diff --git a/bats/compatibility/test_files/bats/helper/windows-compat.bash b/integration-tests/bats/compatibility/test_files/bats/helper/windows-compat.bash similarity index 100% rename from bats/compatibility/test_files/bats/helper/windows-compat.bash rename to integration-tests/bats/compatibility/test_files/bats/helper/windows-compat.bash diff --git a/bats/compatibility/test_files/dolt_versions.txt b/integration-tests/bats/compatibility/test_files/dolt_versions.txt similarity index 100% rename from bats/compatibility/test_files/dolt_versions.txt rename to integration-tests/bats/compatibility/test_files/dolt_versions.txt diff --git a/bats/compatibility/test_files/setup_repo.sh b/integration-tests/bats/compatibility/test_files/setup_repo.sh similarity index 100% rename from bats/compatibility/test_files/setup_repo.sh rename to integration-tests/bats/compatibility/test_files/setup_repo.sh diff --git a/bats/config.bats b/integration-tests/bats/config.bats similarity index 100% rename from bats/config.bats rename to integration-tests/bats/config.bats diff --git a/bats/conflict-detection.bats b/integration-tests/bats/conflict-detection.bats similarity index 100% rename from bats/conflict-detection.bats rename to integration-tests/bats/conflict-detection.bats diff --git a/bats/cp-and-mv.bats b/integration-tests/bats/cp-and-mv.bats similarity index 100% rename from bats/cp-and-mv.bats rename to integration-tests/bats/cp-and-mv.bats diff --git a/bats/create-views.bats b/integration-tests/bats/create-views.bats similarity index 100% rename from bats/create-views.bats rename to integration-tests/bats/create-views.bats diff --git a/bats/creds.bats b/integration-tests/bats/creds.bats similarity index 100% rename from bats/creds.bats rename to integration-tests/bats/creds.bats diff --git a/bats/default-values.bats b/integration-tests/bats/default-values.bats similarity index 100% rename from bats/default-values.bats rename to integration-tests/bats/default-values.bats diff --git a/bats/diff.bats b/integration-tests/bats/diff.bats similarity index 100% rename from bats/diff.bats rename to integration-tests/bats/diff.bats diff --git a/bats/docs.bats b/integration-tests/bats/docs.bats similarity index 100% rename from bats/docs.bats rename to integration-tests/bats/docs.bats diff --git a/bats/empty-repo.bats b/integration-tests/bats/empty-repo.bats similarity index 100% rename from bats/empty-repo.bats rename to integration-tests/bats/empty-repo.bats diff --git a/bats/export-tables.bats b/integration-tests/bats/export-tables.bats similarity index 100% rename from bats/export-tables.bats rename to integration-tests/bats/export-tables.bats diff --git a/bats/feature-version.bats b/integration-tests/bats/feature-version.bats similarity index 100% rename from bats/feature-version.bats rename to integration-tests/bats/feature-version.bats diff --git a/bats/filter-branch.bats b/integration-tests/bats/filter-branch.bats similarity index 100% rename from bats/filter-branch.bats rename to integration-tests/bats/filter-branch.bats diff --git a/bats/foreign-keys.bats b/integration-tests/bats/foreign-keys.bats similarity index 100% rename from bats/foreign-keys.bats rename to integration-tests/bats/foreign-keys.bats diff --git a/bats/garbage_collection.bats b/integration-tests/bats/garbage_collection.bats similarity index 100% rename from bats/garbage_collection.bats rename to integration-tests/bats/garbage_collection.bats diff --git a/bats/git-dolt.bats b/integration-tests/bats/git-dolt.bats similarity index 100% rename from bats/git-dolt.bats rename to integration-tests/bats/git-dolt.bats diff --git a/bats/helper/1pk5col-ints.csv b/integration-tests/bats/helper/1pk5col-ints.csv similarity index 100% rename from bats/helper/1pk5col-ints.csv rename to integration-tests/bats/helper/1pk5col-ints.csv diff --git a/bats/helper/1pk5col-ints.json b/integration-tests/bats/helper/1pk5col-ints.json similarity index 100% rename from bats/helper/1pk5col-ints.json rename to integration-tests/bats/helper/1pk5col-ints.json diff --git a/bats/helper/1pk5col-ints.psv b/integration-tests/bats/helper/1pk5col-ints.psv similarity index 100% rename from bats/helper/1pk5col-ints.psv rename to integration-tests/bats/helper/1pk5col-ints.psv diff --git a/bats/helper/1pk5col-ints.sql b/integration-tests/bats/helper/1pk5col-ints.sql similarity index 100% rename from bats/helper/1pk5col-ints.sql rename to integration-tests/bats/helper/1pk5col-ints.sql diff --git a/bats/helper/1pk5col-strings-newlines.csv b/integration-tests/bats/helper/1pk5col-strings-newlines.csv similarity index 100% rename from bats/helper/1pk5col-strings-newlines.csv rename to integration-tests/bats/helper/1pk5col-strings-newlines.csv diff --git a/bats/helper/1pk5col-strings.csv b/integration-tests/bats/helper/1pk5col-strings.csv similarity index 100% rename from bats/helper/1pk5col-strings.csv rename to integration-tests/bats/helper/1pk5col-strings.csv diff --git a/bats/helper/1pksupportedtypes.csv b/integration-tests/bats/helper/1pksupportedtypes.csv similarity index 100% rename from bats/helper/1pksupportedtypes.csv rename to integration-tests/bats/helper/1pksupportedtypes.csv diff --git a/bats/helper/2pk5col-ints.csv b/integration-tests/bats/helper/2pk5col-ints.csv similarity index 100% rename from bats/helper/2pk5col-ints.csv rename to integration-tests/bats/helper/2pk5col-ints.csv diff --git a/bats/helper/bad-characters.csv b/integration-tests/bats/helper/bad-characters.csv similarity index 100% rename from bats/helper/bad-characters.csv rename to integration-tests/bats/helper/bad-characters.csv diff --git a/bats/helper/bad.csv b/integration-tests/bats/helper/bad.csv similarity index 100% rename from bats/helper/bad.csv rename to integration-tests/bats/helper/bad.csv diff --git a/bats/helper/bad.data b/integration-tests/bats/helper/bad.data similarity index 100% rename from bats/helper/bad.data rename to integration-tests/bats/helper/bad.data diff --git a/bats/helper/bad.xlsx b/integration-tests/bats/helper/bad.xlsx similarity index 100% rename from bats/helper/bad.xlsx rename to integration-tests/bats/helper/bad.xlsx diff --git a/bats/helper/caps-column-names.csv b/integration-tests/bats/helper/caps-column-names.csv similarity index 100% rename from bats/helper/caps-column-names.csv rename to integration-tests/bats/helper/caps-column-names.csv diff --git a/bats/helper/common.bash b/integration-tests/bats/helper/common.bash similarity index 100% rename from bats/helper/common.bash rename to integration-tests/bats/helper/common.bash diff --git a/bats/helper/employees-sch-bad.sql b/integration-tests/bats/helper/employees-sch-bad.sql similarity index 100% rename from bats/helper/employees-sch-bad.sql rename to integration-tests/bats/helper/employees-sch-bad.sql diff --git a/bats/helper/employees-sch.sql b/integration-tests/bats/helper/employees-sch.sql similarity index 100% rename from bats/helper/employees-sch.sql rename to integration-tests/bats/helper/employees-sch.sql diff --git a/bats/helper/employees-tbl-bad.json b/integration-tests/bats/helper/employees-tbl-bad.json similarity index 100% rename from bats/helper/employees-tbl-bad.json rename to integration-tests/bats/helper/employees-tbl-bad.json diff --git a/bats/helper/employees-tbl-new.json b/integration-tests/bats/helper/employees-tbl-new.json similarity index 100% rename from bats/helper/employees-tbl-new.json rename to integration-tests/bats/helper/employees-tbl-new.json diff --git a/bats/helper/employees-tbl-schema-unordered.csv b/integration-tests/bats/helper/employees-tbl-schema-unordered.csv similarity index 100% rename from bats/helper/employees-tbl-schema-unordered.csv rename to integration-tests/bats/helper/employees-tbl-schema-unordered.csv diff --git a/bats/helper/employees-tbl-schema-unordered.json b/integration-tests/bats/helper/employees-tbl-schema-unordered.json similarity index 100% rename from bats/helper/employees-tbl-schema-unordered.json rename to integration-tests/bats/helper/employees-tbl-schema-unordered.json diff --git a/bats/helper/employees-tbl-schema-wrong.csv b/integration-tests/bats/helper/employees-tbl-schema-wrong.csv similarity index 100% rename from bats/helper/employees-tbl-schema-wrong.csv rename to integration-tests/bats/helper/employees-tbl-schema-wrong.csv diff --git a/bats/helper/employees-tbl-schema-wrong.json b/integration-tests/bats/helper/employees-tbl-schema-wrong.json similarity index 100% rename from bats/helper/employees-tbl-schema-wrong.json rename to integration-tests/bats/helper/employees-tbl-schema-wrong.json diff --git a/bats/helper/employees-tbl.json b/integration-tests/bats/helper/employees-tbl.json similarity index 100% rename from bats/helper/employees-tbl.json rename to integration-tests/bats/helper/employees-tbl.json diff --git a/bats/helper/employees.xlsx b/integration-tests/bats/helper/employees.xlsx similarity index 100% rename from bats/helper/employees.xlsx rename to integration-tests/bats/helper/employees.xlsx diff --git a/bats/helper/empty-strings-null-values.json b/integration-tests/bats/helper/empty-strings-null-values.json similarity index 100% rename from bats/helper/empty-strings-null-values.json rename to integration-tests/bats/helper/empty-strings-null-values.json diff --git a/bats/helper/index_onepk.csv b/integration-tests/bats/helper/index_onepk.csv similarity index 100% rename from bats/helper/index_onepk.csv rename to integration-tests/bats/helper/index_onepk.csv diff --git a/bats/helper/index_onepk_non_unique.csv b/integration-tests/bats/helper/index_onepk_non_unique.csv similarity index 100% rename from bats/helper/index_onepk_non_unique.csv rename to integration-tests/bats/helper/index_onepk_non_unique.csv diff --git a/bats/helper/known-decapitated.jwk b/integration-tests/bats/helper/known-decapitated.jwk similarity index 100% rename from bats/helper/known-decapitated.jwk rename to integration-tests/bats/helper/known-decapitated.jwk diff --git a/bats/helper/known-good.jwk b/integration-tests/bats/helper/known-good.jwk similarity index 100% rename from bats/helper/known-good.jwk rename to integration-tests/bats/helper/known-good.jwk diff --git a/bats/helper/known-truncated.jwk b/integration-tests/bats/helper/known-truncated.jwk similarity index 100% rename from bats/helper/known-truncated.jwk rename to integration-tests/bats/helper/known-truncated.jwk diff --git a/bats/helper/old_dolt_schemas/config.json b/integration-tests/bats/helper/old_dolt_schemas/config.json similarity index 100% rename from bats/helper/old_dolt_schemas/config.json rename to integration-tests/bats/helper/old_dolt_schemas/config.json diff --git a/bats/helper/old_dolt_schemas/noms/4bujnjuatdli0klda7ucot0tl836jujt b/integration-tests/bats/helper/old_dolt_schemas/noms/4bujnjuatdli0klda7ucot0tl836jujt similarity index 100% rename from bats/helper/old_dolt_schemas/noms/4bujnjuatdli0klda7ucot0tl836jujt rename to integration-tests/bats/helper/old_dolt_schemas/noms/4bujnjuatdli0klda7ucot0tl836jujt diff --git a/bats/helper/old_dolt_schemas/noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 b/integration-tests/bats/helper/old_dolt_schemas/noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 similarity index 100% rename from bats/helper/old_dolt_schemas/noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 rename to integration-tests/bats/helper/old_dolt_schemas/noms/63c0dojobm5j7arp99hiq78hj1rtp7m5 diff --git a/bats/helper/old_dolt_schemas/noms/LOCK b/integration-tests/bats/helper/old_dolt_schemas/noms/LOCK similarity index 100% rename from bats/helper/old_dolt_schemas/noms/LOCK rename to integration-tests/bats/helper/old_dolt_schemas/noms/LOCK diff --git a/bats/helper/old_dolt_schemas/noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht b/integration-tests/bats/helper/old_dolt_schemas/noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht similarity index 100% rename from bats/helper/old_dolt_schemas/noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht rename to integration-tests/bats/helper/old_dolt_schemas/noms/aum9p7826iqaeq0pjtqlcn56hoj5nhht diff --git a/bats/helper/old_dolt_schemas/noms/chghnlvugtiui6khfo29cpfnfr3166qc b/integration-tests/bats/helper/old_dolt_schemas/noms/chghnlvugtiui6khfo29cpfnfr3166qc similarity index 100% rename from bats/helper/old_dolt_schemas/noms/chghnlvugtiui6khfo29cpfnfr3166qc rename to integration-tests/bats/helper/old_dolt_schemas/noms/chghnlvugtiui6khfo29cpfnfr3166qc diff --git a/bats/helper/old_dolt_schemas/noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 b/integration-tests/bats/helper/old_dolt_schemas/noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 similarity index 100% rename from bats/helper/old_dolt_schemas/noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 rename to integration-tests/bats/helper/old_dolt_schemas/noms/d0b8ibrrjvvv3f0mtd7hathtjq2vhig9 diff --git a/bats/helper/old_dolt_schemas/noms/erturgf7to0f6r8prlbllflbshg5li4n b/integration-tests/bats/helper/old_dolt_schemas/noms/erturgf7to0f6r8prlbllflbshg5li4n similarity index 100% rename from bats/helper/old_dolt_schemas/noms/erturgf7to0f6r8prlbllflbshg5li4n rename to integration-tests/bats/helper/old_dolt_schemas/noms/erturgf7to0f6r8prlbllflbshg5li4n diff --git a/bats/helper/old_dolt_schemas/noms/manifest b/integration-tests/bats/helper/old_dolt_schemas/noms/manifest similarity index 100% rename from bats/helper/old_dolt_schemas/noms/manifest rename to integration-tests/bats/helper/old_dolt_schemas/noms/manifest diff --git a/bats/helper/old_dolt_schemas/noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 b/integration-tests/bats/helper/old_dolt_schemas/noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 similarity index 100% rename from bats/helper/old_dolt_schemas/noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 rename to integration-tests/bats/helper/old_dolt_schemas/noms/oik6v50p7q6as4t7qg7f1i06iomt9vn9 diff --git a/bats/helper/old_dolt_schemas/noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n b/integration-tests/bats/helper/old_dolt_schemas/noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n similarity index 100% rename from bats/helper/old_dolt_schemas/noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n rename to integration-tests/bats/helper/old_dolt_schemas/noms/oktjimrpqi8m9dbpt3c7ikoaolhgtr2n diff --git a/bats/helper/old_dolt_schemas/noms/qe0mct6rf8puhdnqecm185p63dacaqrt b/integration-tests/bats/helper/old_dolt_schemas/noms/qe0mct6rf8puhdnqecm185p63dacaqrt similarity index 100% rename from bats/helper/old_dolt_schemas/noms/qe0mct6rf8puhdnqecm185p63dacaqrt rename to integration-tests/bats/helper/old_dolt_schemas/noms/qe0mct6rf8puhdnqecm185p63dacaqrt diff --git a/bats/helper/old_dolt_schemas/noms/ro000svvgga0k7hatg7fta9j8ismtc3b b/integration-tests/bats/helper/old_dolt_schemas/noms/ro000svvgga0k7hatg7fta9j8ismtc3b similarity index 100% rename from bats/helper/old_dolt_schemas/noms/ro000svvgga0k7hatg7fta9j8ismtc3b rename to integration-tests/bats/helper/old_dolt_schemas/noms/ro000svvgga0k7hatg7fta9j8ismtc3b diff --git a/bats/helper/old_dolt_schemas/noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt b/integration-tests/bats/helper/old_dolt_schemas/noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt similarity index 100% rename from bats/helper/old_dolt_schemas/noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt rename to integration-tests/bats/helper/old_dolt_schemas/noms/u9c6ttq6ddrgqdfbod9pg2vv79ab6crt diff --git a/bats/helper/old_dolt_schemas/repo_state.json b/integration-tests/bats/helper/old_dolt_schemas/repo_state.json similarity index 100% rename from bats/helper/old_dolt_schemas/repo_state.json rename to integration-tests/bats/helper/old_dolt_schemas/repo_state.json diff --git a/bats/helper/pytest.py b/integration-tests/bats/helper/pytest.py similarity index 100% rename from bats/helper/pytest.py rename to integration-tests/bats/helper/pytest.py diff --git a/bats/helper/queries/1pksupportedtypes/add.sql b/integration-tests/bats/helper/queries/1pksupportedtypes/add.sql similarity index 100% rename from bats/helper/queries/1pksupportedtypes/add.sql rename to integration-tests/bats/helper/queries/1pksupportedtypes/add.sql diff --git a/bats/helper/queries/1pksupportedtypes/create_table.sql b/integration-tests/bats/helper/queries/1pksupportedtypes/create_table.sql similarity index 100% rename from bats/helper/queries/1pksupportedtypes/create_table.sql rename to integration-tests/bats/helper/queries/1pksupportedtypes/create_table.sql diff --git a/bats/helper/queries/1pksupportedtypes/delete.sql b/integration-tests/bats/helper/queries/1pksupportedtypes/delete.sql similarity index 100% rename from bats/helper/queries/1pksupportedtypes/delete.sql rename to integration-tests/bats/helper/queries/1pksupportedtypes/delete.sql diff --git a/bats/helper/queries/1pksupportedtypes/update.sql b/integration-tests/bats/helper/queries/1pksupportedtypes/update.sql similarity index 100% rename from bats/helper/queries/1pksupportedtypes/update.sql rename to integration-tests/bats/helper/queries/1pksupportedtypes/update.sql diff --git a/bats/helper/queries/2pk5col-ints/add.sql b/integration-tests/bats/helper/queries/2pk5col-ints/add.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/add.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/add.sql diff --git a/bats/helper/queries/2pk5col-ints/all_pk_update.sql b/integration-tests/bats/helper/queries/2pk5col-ints/all_pk_update.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/all_pk_update.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/all_pk_update.sql diff --git a/bats/helper/queries/2pk5col-ints/create_table.sql b/integration-tests/bats/helper/queries/2pk5col-ints/create_table.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/create_table.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/create_table.sql diff --git a/bats/helper/queries/2pk5col-ints/delete.sql b/integration-tests/bats/helper/queries/2pk5col-ints/delete.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/delete.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/delete.sql diff --git a/bats/helper/queries/2pk5col-ints/single_pk_update.sql b/integration-tests/bats/helper/queries/2pk5col-ints/single_pk_update.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/single_pk_update.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/single_pk_update.sql diff --git a/bats/helper/queries/2pk5col-ints/update.sql b/integration-tests/bats/helper/queries/2pk5col-ints/update.sql similarity index 100% rename from bats/helper/queries/2pk5col-ints/update.sql rename to integration-tests/bats/helper/queries/2pk5col-ints/update.sql diff --git a/bats/helper/query-server-common.bash b/integration-tests/bats/helper/query-server-common.bash similarity index 100% rename from bats/helper/query-server-common.bash rename to integration-tests/bats/helper/query-server-common.bash diff --git a/bats/helper/sql-reserved-column-name.csv b/integration-tests/bats/helper/sql-reserved-column-name.csv similarity index 100% rename from bats/helper/sql-reserved-column-name.csv rename to integration-tests/bats/helper/sql-reserved-column-name.csv diff --git a/bats/helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts b/integration-tests/bats/helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts similarity index 100% rename from bats/helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts rename to integration-tests/bats/helper/testEvents/Epb8UsWYXQCy2c0xeLDl3g.devts diff --git a/bats/helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts b/integration-tests/bats/helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts similarity index 100% rename from bats/helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts rename to integration-tests/bats/helper/testEvents/QkPcFh6D8c7qvaP8jWULqQ.devts diff --git a/bats/helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts b/integration-tests/bats/helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts similarity index 100% rename from bats/helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts rename to integration-tests/bats/helper/testEvents/SQMaInRFa-u0fBtNVZJFJA.devts diff --git a/bats/helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts b/integration-tests/bats/helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts similarity index 100% rename from bats/helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts rename to integration-tests/bats/helper/testEvents/_BWNaFSa7hsRAUydECsSPQ.devts diff --git a/bats/helper/testdata/20200113/.dolt/config.json b/integration-tests/bats/helper/testdata/20200113/.dolt/config.json similarity index 100% rename from bats/helper/testdata/20200113/.dolt/config.json rename to integration-tests/bats/helper/testdata/20200113/.dolt/config.json diff --git a/bats/helper/testdata/20200113/.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/09hv7tllti9b3hfi7u5m3e7lpbne390a diff --git a/bats/helper/testdata/20200113/.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/0kl39j0i7gljemj93loojdhdbsj9lb36 diff --git a/bats/helper/testdata/20200113/.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/1nrr0bod1960bccqc6c2med68hod5gc7 diff --git a/bats/helper/testdata/20200113/.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/1rnurg4no9s6s23mdq8vvfmj0cik47db diff --git a/bats/helper/testdata/20200113/.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/3dsltc9vis2m6o89bv0dh482pfme30ss diff --git a/bats/helper/testdata/20200113/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt diff --git a/bats/helper/testdata/20200113/.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/5im08tb1mu140r7kvtrd04u8ub5qk607 diff --git a/bats/helper/testdata/20200113/.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/6739m2utlhl1k98f4o2fqmgtm12ino4t diff --git a/bats/helper/testdata/20200113/.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/6oc2i2n9ln25n8go78dalvo3e9er9mg3 diff --git a/bats/helper/testdata/20200113/.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/7er6962c841ghn8j0a357ujde9daq3mu diff --git a/bats/helper/testdata/20200113/.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/7vu480853r3b0hitt89l7gc3r854fb53 diff --git a/bats/helper/testdata/20200113/.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/89knkh4sejb7tf05gqq01osftlbsmdq1 diff --git a/bats/helper/testdata/20200113/.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/9guvpb6l55h1t9aqaa9b7qnp1dnnelkd diff --git a/bats/helper/testdata/20200113/.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/9ibrf56gr6gsgr7cpnda4au9o0vd0412 diff --git a/bats/helper/testdata/20200113/.dolt/noms/LOCK b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/LOCK similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/LOCK rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/LOCK diff --git a/bats/helper/testdata/20200113/.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/a8hqijvam2c6r9qvbffsdj5r55bis0mn diff --git a/bats/helper/testdata/20200113/.dolt/noms/a9307merr53dd71vj459m7qo6rk435na b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/a9307merr53dd71vj459m7qo6rk435na similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/a9307merr53dd71vj459m7qo6rk435na rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/a9307merr53dd71vj459m7qo6rk435na diff --git a/bats/helper/testdata/20200113/.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ag7kv5tuc4jvovmas7r5kel32dd94g86 diff --git a/bats/helper/testdata/20200113/.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/c8a3b64elue3121ng0rgeagcnf48fbat diff --git a/bats/helper/testdata/20200113/.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/c8dirve58o6npl3aufbupn3c2pt55el4 diff --git a/bats/helper/testdata/20200113/.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ca9rtjbjd7n5pkodo3rsl6bon0s8qe4j diff --git a/bats/helper/testdata/20200113/.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/csopsqdj2urggh85gbsfth4c9lf4r8vb diff --git a/bats/helper/testdata/20200113/.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/di7sdosugcarnn353e8ldbnlts9v42s5 diff --git a/bats/helper/testdata/20200113/.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/eiit9a47igil0id02vhgpq4g72ga3dha diff --git a/bats/helper/testdata/20200113/.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/es7vlqed0665gq9es3ns2uqeh75bkerc diff --git a/bats/helper/testdata/20200113/.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/fkes7bk2bl0p9cvfgk3dd7uf6p4cqcm1 diff --git a/bats/helper/testdata/20200113/.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/frc0ef452fhh97o534e7lol2b427lk56 diff --git a/bats/helper/testdata/20200113/.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/g2slg3mhtfb5m2tk00t8mor5lkboqj2m diff --git a/bats/helper/testdata/20200113/.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/glc2mu652o0pt893a79j30tc6kgvk453 diff --git a/bats/helper/testdata/20200113/.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/hgsmoadjsib12ml6e05or4q5urv9lt7l diff --git a/bats/helper/testdata/20200113/.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ie2tcnurro57vl8urvucbjdrmmf9bo0h diff --git a/bats/helper/testdata/20200113/.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/iellg8am40vu2tf61hbe7i0anhm76gtv diff --git a/bats/helper/testdata/20200113/.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/jji5lv8nq265dpk6r11ug3gb6ih81hdr diff --git a/bats/helper/testdata/20200113/.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ju51cbttj99itbsbk2svu7sij2tu4rhl diff --git a/bats/helper/testdata/20200113/.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/k3ksuke2vcb2hgatpdqbhildb8raab5p diff --git a/bats/helper/testdata/20200113/.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/kmjfnt24t2vf8e58u3r5insr7tfohm2e diff --git a/bats/helper/testdata/20200113/.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/m297l94np7ub1bp8irhpf3eta6bpegr8 diff --git a/bats/helper/testdata/20200113/.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/m3sn7rmfc0lbis3codosl1k46hpv0kod diff --git a/bats/helper/testdata/20200113/.dolt/noms/manifest b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/manifest similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/manifest rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/manifest diff --git a/bats/helper/testdata/20200113/.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/miv7sdaoglrgfs2rgafm77kr6h9cbgvn diff --git a/bats/helper/testdata/20200113/.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ml7hl70ar993tc32gla4ttjar0ogka86 diff --git a/bats/helper/testdata/20200113/.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/naromh9oel8c6dmmg6lvg61ot3gvomkv diff --git a/bats/helper/testdata/20200113/.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/oarahke38ufh3tmnfpafuvb51dfbhgmh diff --git a/bats/helper/testdata/20200113/.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/og4gt15c913id9e4iv7bcobjkn6aqn8d diff --git a/bats/helper/testdata/20200113/.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ojdo9hafo3mvlko0cefqcom7os26utln diff --git a/bats/helper/testdata/20200113/.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/os1po1dclurjkflegl02usl2r8rkg2cq diff --git a/bats/helper/testdata/20200113/.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/q5eq2e7gn1osgqg6bdqctgi7o7lapsik diff --git a/bats/helper/testdata/20200113/.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/qqc5268agbqc0nqdud6gn7m202teffnm diff --git a/bats/helper/testdata/20200113/.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/rcksm0pvt2fop4deb2tf881mo0vj4ih8 diff --git a/bats/helper/testdata/20200113/.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/rrbqpqt3l59s17rbva7pjrqhitbe4cc2 diff --git a/bats/helper/testdata/20200113/.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/s69lvejsvg9so3l2nsquavmbai4dmu03 diff --git a/bats/helper/testdata/20200113/.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/srlc19tj78ldn4hbb8duso90i1vugc59 diff --git a/bats/helper/testdata/20200113/.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/tmie2h7f80pblg0ojfk0v50qu8s97mpa diff --git a/bats/helper/testdata/20200113/.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/u62g6ma6evirqjb11i0up0p1hppb50ou diff --git a/bats/helper/testdata/20200113/.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 b/integration-tests/bats/helper/testdata/20200113/.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 similarity index 100% rename from bats/helper/testdata/20200113/.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 rename to integration-tests/bats/helper/testdata/20200113/.dolt/noms/ug6l7o53ntp50f252u65cj96om411v14 diff --git a/bats/helper/testdata/20200113/.dolt/repo_state.json b/integration-tests/bats/helper/testdata/20200113/.dolt/repo_state.json similarity index 100% rename from bats/helper/testdata/20200113/.dolt/repo_state.json rename to integration-tests/bats/helper/testdata/20200113/.dolt/repo_state.json diff --git a/bats/helper/testdata/20200113/README.md b/integration-tests/bats/helper/testdata/20200113/README.md similarity index 100% rename from bats/helper/testdata/20200113/README.md rename to integration-tests/bats/helper/testdata/20200113/README.md diff --git a/bats/helper/testdata/20200225/.dolt/config.json b/integration-tests/bats/helper/testdata/20200225/.dolt/config.json similarity index 100% rename from bats/helper/testdata/20200225/.dolt/config.json rename to integration-tests/bats/helper/testdata/20200225/.dolt/config.json diff --git a/bats/helper/testdata/20200225/.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/01mcg27ngkhkrthdo0p1ogdti510ui2d diff --git a/bats/helper/testdata/20200225/.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/0t63hbmjg0o2e0l2muvmpdt7clu931h9 diff --git a/bats/helper/testdata/20200225/.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/0t9600cdhn6hoshofgps1e1qeipsj8dt diff --git a/bats/helper/testdata/20200225/.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/3f7h9ho7l4ltmil4ip6iv5csfjeqa8pe diff --git a/bats/helper/testdata/20200225/.dolt/noms/3oobbccq8prr93u72rui774p5bddobss b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/3oobbccq8prr93u72rui774p5bddobss similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/3oobbccq8prr93u72rui774p5bddobss rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/3oobbccq8prr93u72rui774p5bddobss diff --git a/bats/helper/testdata/20200225/.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/3skhauhatndqile2e7mqs6q25eoh4988 diff --git a/bats/helper/testdata/20200225/.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/4ae47cm21t7cuq7vluh2ugosmv3djfii diff --git a/bats/helper/testdata/20200225/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/4bujnjuatdli0klda7ucot0tl836jujt diff --git a/bats/helper/testdata/20200225/.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/6bc0ms2gnjcepoup7ni9110khaljmu47 diff --git a/bats/helper/testdata/20200225/.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/77goep5rp0nmldp0pn8j66ria281d7tv diff --git a/bats/helper/testdata/20200225/.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/7a407hfrv6mucer355itqg34lsui05ln diff --git a/bats/helper/testdata/20200225/.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/8gnmhsv44p0qfgi21hvq6ql0hvv4r7tr diff --git a/bats/helper/testdata/20200225/.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/8q7v5097qicfnloaqc6roe05ef75428s diff --git a/bats/helper/testdata/20200225/.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/94tvddc0h23hi71m0ovp3emkdv8ko6uq diff --git a/bats/helper/testdata/20200225/.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/9657m1fpeclidkpn8g2h38594pht9jsq diff --git a/bats/helper/testdata/20200225/.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/9hrkb1viqhe9iplh2b623i4g358tcn16 diff --git a/bats/helper/testdata/20200225/.dolt/noms/LOCK b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/LOCK similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/LOCK rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/LOCK diff --git a/bats/helper/testdata/20200225/.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/a4ofkmekn2f0ih23dmqg9klvhr7caje8 diff --git a/bats/helper/testdata/20200225/.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/cae69p9bv9qgk8gnmcetcrq6pb337bur diff --git a/bats/helper/testdata/20200225/.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/cvk1s81mdeof0rnedr8vmk4f3qh91r2a diff --git a/bats/helper/testdata/20200225/.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/fi3vd71upeqgs7ffmc198536l2ah2nem diff --git a/bats/helper/testdata/20200225/.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/fjfk34olm8dg9f3l7u7sqk259allkpbq diff --git a/bats/helper/testdata/20200225/.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/fvv6ab1mar3engqa8aunlous38m1pbtd diff --git a/bats/helper/testdata/20200225/.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/g1k00sceog5vkmf454dpcf5prg458vrh diff --git a/bats/helper/testdata/20200225/.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/g3n9nvmfponntake5r368lnlljmbidke diff --git a/bats/helper/testdata/20200225/.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/gi9e8nmhav58f4vukca2vc2cd87u09af diff --git a/bats/helper/testdata/20200225/.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/h16g5dvp5vkq837snpa8760ac8lhl4ad diff --git a/bats/helper/testdata/20200225/.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/h463bia4dpvciqkm76vfj5qr4ed0l6k1 diff --git a/bats/helper/testdata/20200225/.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/jff26llmtmj7ap2rtlc4g7v42bfmg8a7 diff --git a/bats/helper/testdata/20200225/.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/jqt5s1qs2g998ugg538u8l7c706it2cb diff --git a/bats/helper/testdata/20200225/.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/lci84t6s7j5r171qn02dlr7aqns6549e diff --git a/bats/helper/testdata/20200225/.dolt/noms/manifest b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/manifest similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/manifest rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/manifest diff --git a/bats/helper/testdata/20200225/.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/n49314e2mcvrf6fi2g6s1s3dkv87e4i0 diff --git a/bats/helper/testdata/20200225/.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/p3u6rb5hpkc8dcqfvlq3ptr2a0rsodu2 diff --git a/bats/helper/testdata/20200225/.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/psdvh71n9e069pl01nkcg5aijos7k891 diff --git a/bats/helper/testdata/20200225/.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/rd6kqkaclph8l93js1f2h00pna5uuqif diff --git a/bats/helper/testdata/20200225/.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/refbbl8digdrdb0mhrfk6a0mkuhb0ran diff --git a/bats/helper/testdata/20200225/.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/sfa54kk9itpahbnapbf56d6vue2b6iko diff --git a/bats/helper/testdata/20200225/.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/t9virrnc5olckgn23ok6cnak68ld8a29 diff --git a/bats/helper/testdata/20200225/.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/u025c384nohd013tjaeq6c1vn6cj1v9r diff --git a/bats/helper/testdata/20200225/.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/vcgoj8o1malsol4avn930tpngsd4094u diff --git a/bats/helper/testdata/20200225/.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo b/integration-tests/bats/helper/testdata/20200225/.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo similarity index 100% rename from bats/helper/testdata/20200225/.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo rename to integration-tests/bats/helper/testdata/20200225/.dolt/noms/vfm8fpknt3arl9rn73mh1nn0sk46olmo diff --git a/bats/helper/testdata/20200225/.dolt/repo_state.json b/integration-tests/bats/helper/testdata/20200225/.dolt/repo_state.json similarity index 100% rename from bats/helper/testdata/20200225/.dolt/repo_state.json rename to integration-tests/bats/helper/testdata/20200225/.dolt/repo_state.json diff --git a/bats/helper/testdata/20200225/LICENSE.md b/integration-tests/bats/helper/testdata/20200225/LICENSE.md similarity index 100% rename from bats/helper/testdata/20200225/LICENSE.md rename to integration-tests/bats/helper/testdata/20200225/LICENSE.md diff --git a/bats/helper/testdata/20200225/README.md b/integration-tests/bats/helper/testdata/20200225/README.md similarity index 100% rename from bats/helper/testdata/20200225/README.md rename to integration-tests/bats/helper/testdata/20200225/README.md diff --git a/bats/helper/testdata/README.md b/integration-tests/bats/helper/testdata/README.md similarity index 100% rename from bats/helper/testdata/README.md rename to integration-tests/bats/helper/testdata/README.md diff --git a/bats/helper/testdata/new_repo.sh b/integration-tests/bats/helper/testdata/new_repo.sh similarity index 100% rename from bats/helper/testdata/new_repo.sh rename to integration-tests/bats/helper/testdata/new_repo.sh diff --git a/bats/helper/windows-compat.bash b/integration-tests/bats/helper/windows-compat.bash similarity index 100% rename from bats/helper/windows-compat.bash rename to integration-tests/bats/helper/windows-compat.bash diff --git a/bats/import-create-tables.bats b/integration-tests/bats/import-create-tables.bats similarity index 100% rename from bats/import-create-tables.bats rename to integration-tests/bats/import-create-tables.bats diff --git a/bats/import-replace-tables.bats b/integration-tests/bats/import-replace-tables.bats similarity index 100% rename from bats/import-replace-tables.bats rename to integration-tests/bats/import-replace-tables.bats diff --git a/bats/import-update-tables.bats b/integration-tests/bats/import-update-tables.bats similarity index 100% rename from bats/import-update-tables.bats rename to integration-tests/bats/import-update-tables.bats diff --git a/bats/index-on-writes.bats b/integration-tests/bats/index-on-writes.bats similarity index 100% rename from bats/index-on-writes.bats rename to integration-tests/bats/index-on-writes.bats diff --git a/bats/index.bats b/integration-tests/bats/index.bats similarity index 100% rename from bats/index.bats rename to integration-tests/bats/index.bats diff --git a/bats/keyless.bats b/integration-tests/bats/keyless.bats similarity index 100% rename from bats/keyless.bats rename to integration-tests/bats/keyless.bats diff --git a/bats/localbs-remotes.bats b/integration-tests/bats/localbs-remotes.bats similarity index 100% rename from bats/localbs-remotes.bats rename to integration-tests/bats/localbs-remotes.bats diff --git a/bats/log.bats b/integration-tests/bats/log.bats similarity index 100% rename from bats/log.bats rename to integration-tests/bats/log.bats diff --git a/bats/merge.bats b/integration-tests/bats/merge.bats similarity index 100% rename from bats/merge.bats rename to integration-tests/bats/merge.bats diff --git a/bats/multiple-tables.bats b/integration-tests/bats/multiple-tables.bats similarity index 100% rename from bats/multiple-tables.bats rename to integration-tests/bats/multiple-tables.bats diff --git a/bats/no-repo.bats b/integration-tests/bats/no-repo.bats similarity index 100% rename from bats/no-repo.bats rename to integration-tests/bats/no-repo.bats diff --git a/bats/query-catalog.bats b/integration-tests/bats/query-catalog.bats similarity index 100% rename from bats/query-catalog.bats rename to integration-tests/bats/query-catalog.bats diff --git a/bats/regression-tests.bats b/integration-tests/bats/regression-tests.bats similarity index 100% rename from bats/regression-tests.bats rename to integration-tests/bats/regression-tests.bats diff --git a/bats/remotes-file-system.bats b/integration-tests/bats/remotes-file-system.bats similarity index 100% rename from bats/remotes-file-system.bats rename to integration-tests/bats/remotes-file-system.bats diff --git a/bats/remotes.bats b/integration-tests/bats/remotes.bats similarity index 100% rename from bats/remotes.bats rename to integration-tests/bats/remotes.bats diff --git a/bats/rename-tables.bats b/integration-tests/bats/rename-tables.bats similarity index 100% rename from bats/rename-tables.bats rename to integration-tests/bats/rename-tables.bats diff --git a/bats/schema-changes.bats b/integration-tests/bats/schema-changes.bats similarity index 100% rename from bats/schema-changes.bats rename to integration-tests/bats/schema-changes.bats diff --git a/bats/schema-export.bats b/integration-tests/bats/schema-export.bats similarity index 100% rename from bats/schema-export.bats rename to integration-tests/bats/schema-export.bats diff --git a/bats/schema-import.bats b/integration-tests/bats/schema-import.bats similarity index 100% rename from bats/schema-import.bats rename to integration-tests/bats/schema-import.bats diff --git a/bats/send-metrics.bats b/integration-tests/bats/send-metrics.bats similarity index 100% rename from bats/send-metrics.bats rename to integration-tests/bats/send-metrics.bats diff --git a/bats/server_multiclient_test.py b/integration-tests/bats/server_multiclient_test.py similarity index 100% rename from bats/server_multiclient_test.py rename to integration-tests/bats/server_multiclient_test.py diff --git a/bats/sql-add.bats b/integration-tests/bats/sql-add.bats similarity index 100% rename from bats/sql-add.bats rename to integration-tests/bats/sql-add.bats diff --git a/bats/sql-batch.bats b/integration-tests/bats/sql-batch.bats similarity index 100% rename from bats/sql-batch.bats rename to integration-tests/bats/sql-batch.bats diff --git a/bats/sql-checkout.bats b/integration-tests/bats/sql-checkout.bats similarity index 100% rename from bats/sql-checkout.bats rename to integration-tests/bats/sql-checkout.bats diff --git a/bats/sql-commit.bats b/integration-tests/bats/sql-commit.bats similarity index 100% rename from bats/sql-commit.bats rename to integration-tests/bats/sql-commit.bats diff --git a/bats/sql-conflicts.bats b/integration-tests/bats/sql-conflicts.bats similarity index 100% rename from bats/sql-conflicts.bats rename to integration-tests/bats/sql-conflicts.bats diff --git a/bats/sql-create-database.bats b/integration-tests/bats/sql-create-database.bats similarity index 100% rename from bats/sql-create-database.bats rename to integration-tests/bats/sql-create-database.bats diff --git a/bats/sql-create-tables.bats b/integration-tests/bats/sql-create-tables.bats similarity index 100% rename from bats/sql-create-tables.bats rename to integration-tests/bats/sql-create-tables.bats diff --git a/bats/sql-delimiter.expect b/integration-tests/bats/sql-delimiter.expect similarity index 100% rename from bats/sql-delimiter.expect rename to integration-tests/bats/sql-delimiter.expect diff --git a/bats/sql-diff.bats b/integration-tests/bats/sql-diff.bats similarity index 100% rename from bats/sql-diff.bats rename to integration-tests/bats/sql-diff.bats diff --git a/bats/sql-load-data.bats b/integration-tests/bats/sql-load-data.bats similarity index 100% rename from bats/sql-load-data.bats rename to integration-tests/bats/sql-load-data.bats diff --git a/bats/sql-merge.bats b/integration-tests/bats/sql-merge.bats similarity index 100% rename from bats/sql-merge.bats rename to integration-tests/bats/sql-merge.bats diff --git a/bats/sql-multi-db.bats b/integration-tests/bats/sql-multi-db.bats similarity index 100% rename from bats/sql-multi-db.bats rename to integration-tests/bats/sql-multi-db.bats diff --git a/bats/sql-reserved-column-name.bats b/integration-tests/bats/sql-reserved-column-name.bats similarity index 100% rename from bats/sql-reserved-column-name.bats rename to integration-tests/bats/sql-reserved-column-name.bats diff --git a/bats/sql-reset.bats b/integration-tests/bats/sql-reset.bats similarity index 100% rename from bats/sql-reset.bats rename to integration-tests/bats/sql-reset.bats diff --git a/bats/sql-server.bats b/integration-tests/bats/sql-server.bats similarity index 100% rename from bats/sql-server.bats rename to integration-tests/bats/sql-server.bats diff --git a/bats/sql-shell.bats b/integration-tests/bats/sql-shell.bats similarity index 100% rename from bats/sql-shell.bats rename to integration-tests/bats/sql-shell.bats diff --git a/bats/sql-shell.expect b/integration-tests/bats/sql-shell.expect similarity index 100% rename from bats/sql-shell.expect rename to integration-tests/bats/sql-shell.expect diff --git a/bats/sql-status.bats b/integration-tests/bats/sql-status.bats similarity index 100% rename from bats/sql-status.bats rename to integration-tests/bats/sql-status.bats diff --git a/bats/sql-works-after-failing-query.expect b/integration-tests/bats/sql-works-after-failing-query.expect similarity index 100% rename from bats/sql-works-after-failing-query.expect rename to integration-tests/bats/sql-works-after-failing-query.expect diff --git a/bats/sql.bats b/integration-tests/bats/sql.bats similarity index 100% rename from bats/sql.bats rename to integration-tests/bats/sql.bats diff --git a/bats/status.bats b/integration-tests/bats/status.bats similarity index 100% rename from bats/status.bats rename to integration-tests/bats/status.bats diff --git a/bats/system-tables.bats b/integration-tests/bats/system-tables.bats similarity index 100% rename from bats/system-tables.bats rename to integration-tests/bats/system-tables.bats diff --git a/bats/triggers.bats b/integration-tests/bats/triggers.bats similarity index 100% rename from bats/triggers.bats rename to integration-tests/bats/triggers.bats diff --git a/bats/types.bats b/integration-tests/bats/types.bats similarity index 100% rename from bats/types.bats rename to integration-tests/bats/types.bats diff --git a/bats/verify-constraints.bats b/integration-tests/bats/verify-constraints.bats similarity index 100% rename from bats/verify-constraints.bats rename to integration-tests/bats/verify-constraints.bats